程序集延遲簽名-學習筆記

背景:爲了防止私鑰泄露,公司裏只有少數幾個人才能訪問到私鑰。其他同事開發時,也需要編譯,但不又能給他們密鑰,我們就需要使用延遲簽名技術了。

 

 

1.       創建密鑰對

sn -k mykeyfile.pfx

無密碼保護,該文件需要安全保管

 

2.       安裝密鑰對到於強名稱 CSP 中容器

sn -i mykeyfile.pfx mykeycontainer

 

3.       提取公鑰文件

sn -p mykeyfile.pfx mykeyfile.pub

 

4.       顯示公鑰標記

(短,2780ccd10d57b246這種),用於-Vr選項

sn -q -t mykeyfile.pub

 

5.       顯示完整公鑰

用於assembly: InternalsVisibleTo的PublicKey

sn -q -tp mykeyfile.pub

 

6.       使CLR暫時信任程序集的內容

註冊要跳過驗證的程序集,使CLR暫時信任程序集的內容,不對它進行哈希處理,也不對哈希值進行比較。這使程序集能順利安裝到GAC(如果有必要的話)。現在,可以生成引用了這個程序集的其他程序集,並可隨意測試程序集,否則會報錯(程序簽名無效或被串改)。注意,在每臺開發用的機器上,以下命令行都只需執行一次,不必在每次生成程序集時都重複這一步:

sn -Vr MyAssembly.dll

或所有這個PublicKey的程序集sn-Vr *,2780ccd10d57b246

7.       設置項目爲延遲簽名

命令行方式:csc/keyfile: mykeyfile.pub /delaysign MyAssembly.cs

UI方式:在項目中,選擇簽名文件選擇mykeyfile.pub, 然後鉤上“延遲簽名”

 

 

8.       真正發佈

結束一個程序集的開發和測試之後,需要正式對其進行簽名,以便打包和部署它。爲了對程序集進行簽名,要再次使用SN.exe實用程序,但這一次換用-R開關,並指定包含了私鑰的文件的名稱。-R開關指示SN.exe對文件內容進行哈希處理,用私鑰對其進行簽名,並將RSA數字簽名嵌入文件中之前預留的空間。經過這一步之後,就可以部署完全簽好名的程序集。在開發和測試機器上,不要忘記使用SN.exe的-Vu或-Vx命令行開關來重新啓用對這個程序集的驗證。

sn -Vu MyAssembly.dll

sn -Vu *,2780ccd10d57b246

 

使用 infile 中的密鑰對,爲先前已簽名的程序集或延遲簽名的程序集重新簽名。

SN.exe -R MyAssembly.dll mykeyfile.pfx

 

使用 container 中的密鑰對,爲先前已簽名的程序集或延遲簽名的程序集重新簽名。

SN.exe -Rc MyAssembly.dll mykeycontainer

 

重新編譯方式

msbuild/p:KeyPairContainer=mykeycontainer,PublicKeyFile="<完整路徑> \mykeyfile.pub"

 

如果公鑰/私鑰對在一個CSP容器中,必須爲CSC.exe、AL.exe和SN.exe程序指定不同的開關。編譯時(CSC.exe),要指定/keycontainer開關,而不是/keyfile開關;鏈接時(AL.exe),要指定/keyname開關,而不是/keyfile開關;使用強名稱程序(SN.exe)對一個延遲簽名的程序集進行重新簽名時,要指定-Rc開關,而不是-R開關。

 

重要提示  打包一個程序集前,只要你希望對它執行其他任何操作,延遲簽名都非常有用。例如,可能想要對自己的程序集運行一個混淆器(obfuscator)程序。程序集在完全簽名後,便不能再對它運行混淆器,否則哈希值就不正確了。所以,要想混淆一個程序集文件,或者進行其他形式的"生成後"(post-build)操作,就應該使用延遲簽名,執行所有必要的"生成後"操作,再用-R或-Rc開關運行SN.exe,最終完成對程序集的簽名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章