數字簽名對于發布的軟體具有很重要的作用,簽名過的軟體,對使用者來說,表明軟體未被篡改過、可信任的;對開發者/廠商來說,避免第三方的破壞,保證代碼的完整性,在企業應用環境中,沒有數字簽名的軟體,通常是不被信任的,比如通過殺毒軟體的過濾進行屏蔽(軟體簽名被破壞,通常是破解行為,容易被偵測到hook行為),
本文將描述如何在Windows平臺下獲取簽名證書及獲取后如何對程式/代碼進行數字簽名,
1. CSR
什么是CSR?CSR是Certificate Signing Request的縮寫,是一段經過編碼過的文本,用于向CA機構申請證書,CSR除了必備資訊外,還包含了申請證書的機器資訊,必備資訊為:
a. Common Name
b. Organization
c. Locality
d. Country
除上述資訊外,還包含public key資訊,對于private key,屬較為敏感資訊,可在生成CSR的時候單獨存盤,CA機構在發放證書時,并不需要private key,其僅保留public key以保證資訊交換的無抵賴性,
大部分CSR是以base64編碼的,形如下列格式,以"-----BEGIN CERTIFICATE REQUEST-----"開始,以 "-----END CERTIFICATE REQUEST-----"結束:
-----BEGIN CERTIFICATE REQUEST----- MIIDCzCCAfMCAQAwgZkxCzAJBgNVBAYTAlpIMREwDwYDVQQIDAhTaGFuZ2hhaTEL MAkGA1UEBwwCU0gxHjAcBgNVBAoMFVpGIEZyaWVkcmljaHNoYWZlbiBBRzEPMA0G A1UECwwGRklQUTIxMRkwFwYDVQQDDBBaRiBTSCBNYW5hZ2VtZW50MR4wHAYJKoZI hvcNAQkBFg95YW5iby5odUB6Zi5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQCWw2uxxxgw2d6WRptSY0Z0tryCBEEdpFWIIKApUq5IZ6eyJ57AVyUn 3c3+aRimkBhByDELBkTpVBA1ae+iKI3pidY3RUHnMh9F/j9UZEIMA68sCoemju3U J0LY2E3AMEriBcxNbHl+X0X5k4b7ewumbN7x6A/iw0JipBAGzQlpuCQnQXwUd07P LYiolrOOvhyDCOqf6e/1qHXYZd6vdDBumTqFxsGi32sPeYsKF5JuWaZbLLIv/+9s Tc1h5tkUahMRHAJMoh+/vL5EsiH7/2KEvZSPbKh4FOPknf3s+ArBrcnxhHdSbp0k TSEUssGWvK2D4mqwvg+ym67k7C+EHY5ZAgMBAAGgLDARBgkqhkiG9w0BCQIxBAwC SVQwFwYJKoZIhvcNAQkHMQoMCEFDQ0J1aWxkMA0GCSqGSIb3DQEBCwUAA4IBAQCP 4ogSKHCmvbV0scJoxryergKdMROYh/+9TuGLYmjuyV7hqkrLgwtmhWpAyFjLZTZ1 0d8UlZcurMku0AAF8KlLzAGSQC69N4fMC3ZX5QDkAzp97CFRJlA8Awj+wjlPQVI4 pH8NiwHm6+TPsuTtSgWHAVOeGeju4+/tF3bR8ksL8ucQprggns3VeT77UqNEoxvL nOxcQ6NJ1JZF55j6qmgMR/pViXZhgxEVNejk8JSDLGlBIO7Kikk87iGclEn0yXQa iaMJggtUmNhyQn7+6fbgBhByl5kiXXikS/fiHQuiw6wXVLQph+qO1u3DQhsu0Ykd FrgymC3g2QpNMXUv9rBh -----END CERTIFICATE REQUEST-----CSR
如何生成CSR及private key?可利用windows自帶的工具,或者第三方的工具OpenSSL等,
在Windows中,可打開certmgr.msc控制臺程式,在persnal節點中生成CSR檔案

在生成CSR的向導中,務必需要注意按照CA機構是否對生成CSR的模板有要求,如有,比如演算法、密文長度、用途等,可直接向CA申請模板,或者選擇Custom Request后,按照要求填寫,

如使用OpenSSL工具,可直接鍵入下面的命令
openssl req -newkey rsa:2048 -keyout PRIVATEKEY.key -out MyCSR.csr
執行后,根據提示輸入資訊,目錄中將出現privatekey.key和MyCSR.csr檔案,注意務必保管好生成的privatekey.key檔案,MyCSR.csr是用于向CA機構提交的檔案,
上述命令中RSA的長度為2048,長度越長,資訊交換安全性越高,但加密代價越大,對512的長度,已經被證實不安全,不再推薦,1024為常用,太長的4096也不建議,加密長度太長,資訊交換代價太大,得不償失,
2.向CA證書頒發機構提交CSR
將生成的CSR提交到CA機構后,CA機構會進行一系列驗證(是否符合其指定要求),通過驗證后,會生成證書,提交CSR后,進行等待,通過后會有相應通知去獲取證書檔案,
3.根據CA發回的PEM檔案,生成pfx證書
CA發放的證書檔案,通常可分為.cer、.der、.p7b、.pem檔案,這些檔案可進行相互轉換,這些檔案僅有公鑰資訊,直接雙擊安裝或者匯入,因缺失私鑰,將無法用來做數字簽名,比如下面的安裝就是無效的證書安裝:

在OpenSSL中,可使用如下命令生成pfx證書:
openssl pkcs12 -export -inkey privatekey.key -in pem_file_from_CA.pem -out cert.pfx
在prompt視窗中,將要求提供訪問privatekey的pass code,此pass code即為創建CSR的輸入的pass code,
4.安裝pfx證書
對生成的pfx證書,可直接雙擊安裝或者匯入安裝,安裝完成,可通過瀏覽器查看證書,

如果查看后,沒有最后一行的"You have a private key....",則表明證書安裝無效,此時是沒法使用該證書進行簽名,
5.簽名程式或者code sigining
對第4步中得到pfx檔案,可進行程式簽名或代碼簽名,在visual studio中,將pfx檔案指定到project檔案的屬性頁中,可在編譯時(post event)自動完成簽名,
亦可通過在命令列中手動簽名(簽名中,時間戳同樣重要,但不是強制):
signtool sign /a /fd sha384 /tr http://timestamp.digicert.com /v your_files
或者在visual studio中,通過project的屬性build標簽頁,Post Event中增加上述命令列,這樣在每次編譯/發布的時候,自動簽名:
<Target Name="PostBuild" AfterTargets="PostBuildEvent"> <Exec Command=""$(SignToolPath)signtool.exe" sign /a /fd sha384 /tr http://timestamp.digicert.com /v "$(TargetDir)$(TargetName)*.dll"
"$(SignToolPath)signtool.exe" sign /a /fd sha384 /tr http://timestamp.digicert.com /v "$(TargetDir)$(TargetName)*.exe"" /> </Target>View Code
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/436970.html
標籤:其他
上一篇:3年軟體測驗工程師作業感悟,誰還能“點點點”一輩子呢?
下一篇:渲染路徑(Rendering Path)(Forward、Deferred、Light-PrePass、Tiled、Clustered)
