2012-06-27 120 views
22

我已經從證書服務器發佈了自己的代碼簽名證書。我還自己頒發了來自同一證書服務器的根證書。 根證書存在於「受信任的根證書頒發機構」文件夾中的「當前用戶」和「本地計算機」證書存儲區中。成功使用signtool.exe嚮導簽訂了DLL:爲什麼我的根證書不受信任?

"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\signtool.exe" signwizard <MyDLLName>.dll 

然而,當我嘗試驗證我的DLL,它驗證失敗,出現以下錯誤:

"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\signtool.exe" verify <MyDLLName>.dll 
SignTool Error: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider. 
SignTool Error: File not valid: <MyDLLName>.dll 

爲什麼這發生?我認爲在Trusted Root Certification Authorities文件夾中擁有根證書可以驗證DLL。

回答

49

在您的驗證命令添加到/ PA選項來告訴它使用默認身份驗證驗證策略而不是Windows驅動程序驗證策略的,這意味着它會看你的證書存儲,而不是一套有限的CA微軟信託與驅動程序。

在這裏尋找更多的選擇: http://msdn.microsoft.com/en-us/library/8s9b9yaz(v=vs.90).aspx

+0

嗨凱文,我試圖調用由自簽名的SSL證書託管WCF服務,將在本地安裝SSL與上面的選項工作?你能發送完整的命令來使用嗎?我有.pfx和.cer文件,但ASP.net無法信任SSL提供程序。 –

+0

@SanjayZalke您可以使用Windows證書管理工具將證書安裝到本地計算機的受信任根CA文件夾中。您可以通過mmc.exe啓動它並添加證書管理單元。 –

+5

一個重要這裏需要注意的是,如果你有一個內核驅動程序(.SYS)這樣做,這是不行的,因爲內核驅動程序必須最終由Microsoft根證書信任。如果添加提到的/ pa選項,驗證本身將會通過,但驅動程序實際上不會加載,它仍然會說未簽名的驅動程序錯誤。在引導過程中內核沒有訪問完整的證書存儲,因此只能看一組有限的與司機CA的微軟信託。 – Syclone0044

相關問題