在我接管的一些C#代碼中(在Visual Studio 2005中),我注意到這些程序集都使用相同的.snk
文件進行了簽名。C#:爲什麼要簽署一個程序集?
- 爲什麼以前的作者用這種方式簽署了程序集?
- 是否需要簽署程序集,以及 在簽名時會出錯?
- 簽名程序集有什麼缺點 - 它會導致延遲嗎?
在我接管的一些C#代碼中(在Visual Studio 2005中),我注意到這些程序集都使用相同的.snk
文件進行了簽名。C#:爲什麼要簽署一個程序集?
爲什麼以前的作者用這種方式簽署了程序集?
不知道,也許他想讓他所有的程序集都用相同的密鑰簽名。
是否需要簽署程序集以及未簽署程序時會出現什麼問題?
不,這不是必要的,但它是一種機制,可以確保裝配的真實性。它可以讓你確保程序集沒有被篡改,而且它確實源自於這位作者。如果您想將它們放入GAC,也是必要的。
簽署程序集有什麼不利之處 - 它會導致延遲嗎?
簽名的程序集只能加載其他簽名的程序集。此外,它們與特定版本綁定,這意味着如果您想使用不同的版本,則需要使用綁定重定向或重新編譯應用程序。由於對簽名進行了驗證,所以性能開銷也有一些小問題,但它很少,您不應該擔心。
如果您想將它們放在GAC中,則需要簽署程序集。
如果您簽署了可執行文件,那麼它鏈接到的任何類庫也需要進行簽名。如果您使用第三方庫(如果您需要使用ActiveX控件或類似工具),這可能會很困難。
理查德·格里姆斯已經.NET寫安全良好的車間,幷包括了在這一章:Security Workshop
原因所有組件用相同的.snk文件簽署的可能是,如果他使用的單位測試代碼覆蓋率。爲了能夠執行代碼覆蓋(至少使用視覺 Studio 2005的測試版內置的工具),並且如果程序集已簽名,則需要指定用於簽名的.snk文件,但我認爲您只能爲整個解決方案指定一個.snk文件,因此如果您使用不同的.snk文件簽署各種類庫,則一次只能檢查其中一個的代碼覆蓋率。
移到http://www.grimes.nildram.co.uk/workshops.htm – LiamV 2013-08-28 08:15:54
@LiamV謝謝,更新。 – 2013-08-28 11:52:04
簽署裝配體的一個非常重要的原因是您可以確定它是您的裝配體。由於私鑰是你的,所以沒有其他人可以使用同一個密鑰簽署程序集。這意味着當一個程序集的公鑰是一個你知道的(你可以使用GetType().Assembly.GetName().GetPublicKey()
函數檢索這個程序集),程序集是你的,並且它沒有被篡改。
簽署DLL的所有用途的Inspite,該dll應該只有兩個原因
1版本
2.認證
一個簽名。版本控制表示dll的版本是什麼版本,同時將它們推入到GAC中,同名的兩個dll可以存在,但版本不同
b。身份驗證表示該dll是否未被篡改,並且在創建時確實存在。
如果您想了解更多有關的基礎知識和DLL簽名您可以參考here
你現在對簽名有什麼看法?在基於Web的系統上?如果我是正確的,那麼只有在談論已安裝的軟件時纔是必要的,對嗎?如果我使用TFS將我的應用程序發佈到Azure,我知道它沒有被篡改,對吧?或者我錯過了一些安全部分? – 2017-05-08 14:11:50
我沒有看到爲什麼我們現在應該簽署一個dll,這將在Azure中部署爲Paas解決方案。但是,如果你有iaas解決方案,你可以在同一個iis中通過web應用程序重用dll。我不推薦。我們應該通過API調用它們,而不是使用來自GAC(微服務架構)的這些dll。 – 2017-05-09 04:54:47
明智的答案 – Eon 2014-04-15 11:48:49
請注意,放置在GAC中時,驗證簽名不會再發生(自.NET 2.0開始); [只有在將其添加到GAC時纔會發生一次](http://davidyardy.com/archive/strong-names-and-signing-assemblies-netaspx/)。 – Abel 2016-10-12 18:25:10
你覺得現在簽署它怎麼樣?在基於Web的系統上?如果我是正確的,那麼只有在談論已安裝的軟件時纔是必要的,對嗎?如果我使用TFS將我的應用程序發佈到Azure,我知道它沒有被篡改,對吧?或者我錯過了一些安全部分? – 2017-05-08 14:12:04