証明書サーバーからコード署名証明書を自分で発行しました。また、同じ証明書サーバーからルート証明書を自分で発行しました。 ルート証明書は、信頼されたルート証明機関フォルダー内の現在のユーザーとローカルコンピューターの両方の証明書ストアに存在します。私は成功しました署名済みDLL = signtool.exeウィザードを使用:
"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が検証されると思いました。
Verifyコマンドで/ paオプションを追加して、Windowsドライバー検証ポリシーの代わりにデフォルト認証検証ポリシーを使用するように指示します。つまり、Microsoftがドライバーと信頼するCAの限定されたセットではなく、証明書ストアを参照します。
その他のオプションについては、こちらをご覧ください: http://msdn.Microsoft.com/en-us/library/8s9b9yaz(v = vs.90).aspx