company.pfx に保存されている証明書で Application.exe ファイルに署名する必要があります。だから、私は署名ツールを使用しました:
signtool.exe sign /p password /f company.pfx /t http://timestamp.verisign.com/scripts/timestamp.dll /v Application.exe
The following certificate was selected:
Issued to: Company, Inc.
Issued by: Thawte Code Signing CA - G2
Expires: Wed Aug 27 02:59:59 2014
SHA1 hash: A2A0BD7C4516BF8C88AECC3A568CE9BB5D63902D
Done Adding Additional Store
Successfully signed and timestamped: App1_old.exe
Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0
signtool は、エラーはないと言いました。しかし、デジタル署名の詳細には、「署名内の証明書を検証できません」というメッセージがあります。認定パスはありません。
詳細には、 「失効ステータス:失効サーバーがオフラインだったため、失効機能は失効を確認できませんでした」というプロパティ「拡張エラー情報」があります。
問題を調査するために、アプリケーションで sigcheck (-a key) を使用しましたが、「検証済み: 信頼されたルート機関に対して証明書チェーンを構築できませんでした」と表示されます。
次に、pfx ファイルをリポジトリにインポートしましたが、証明書は問題ないようです。
自分のトピックについてstackoverflowを検索したところ、いくつかのリンクが見つかり、役に立ちました。
証明書のチェーンを使用して PFX を作成する方法を教えてください。
コード署名証明書を使用して ActiveX コントロールに署名し、検証済みの発行元になるにはどうすればよいですか?
解決策は、pfx から (OpenSSL を使用して) 証明書を抽出し、/ac 引数を使用して適用することです。
openssl pkcs12 -in company.pfx -out company_cl.pem -nodes -clcerts
openssl x509 -in company_cl.pem -out company_cl.cer -outform DER
signtool sign /ac company_cl.cer /p password /f company.pfx /t http://timestamp.verisign.com/scripts/timstamp.dll /v Application.exe
The following certificate was selected:
Issued to: Company, Inc.
Issued by: Thawte Code Signing CA - G2
Expires: Wed Aug 27 02:59:59 2014
SHA1 hash: A2A0BD7C4516BF8C88AECC3A568CE9BB5D63902D
Cross certificate chain (using machine store):
Issued to: thawte Primary Root CA
Issued by: thawte Primary Root CA
Expires: Thu Jul 17 02:59:59 2036
SHA1 hash: 91C6D6EE3E8AC86384E548C299295C756C817B81
Issued to: Thawte Code Signing CA - G2
Issued by: thawte Primary Root CA
Expires: Sat Feb 08 02:59:59 2020
SHA1 hash: 808D62642B7D1C4A9A83FD667F7A2A9D243FB1C7
Issued to: Company, Inc.
Issued by: Thawte Code Signing CA - G2
Expires: Wed Aug 27 02:59:59 2014
SHA1 hash: A2A0BD7C4516BF8C88AECC3A568CE9BB5D63902D
Done Adding Additional Store
Successfully signed and timestamped: Application.exe
Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0
Digital Security Details のメッセージは「The digital signature is OK.」です。
しかし、/ac 引数を使用する必要がある理由がわかりません。誰にもアイデアはありますか?
編集しました。
アプリケーションの最初のバージョン (/ac なし) を Application.exe で検証したところ、詳細情報が得られました。
signtool.exe verify /v /kp Application.exe
Verifying: Application.exe
Hash of file (sha1): 5CBB228F4F206C65AAC829ACF40C297F291FE0A7
Signing Certificate Chain:
Issued to: Company, Inc.
Issued by: Thawte Code Signing CA - G2
Expires: Wed Aug 27 02:59:59 2014
SHA1 hash: A2A0BD7C4516BF8C88AECC3A568CE9BB5D63902D
The signature is timestamped: Fri Mar 29 18:42:56 2013
Timestamp Verified by:
Issued to: Thawte Timestamping CA
Issued by: Thawte Timestamping CA
Expires: Fri Jan 01 02:59:59 2021
SHA1 hash: BE36A4562FB2EE05DBB3D32323ADF445084ED656
Issued to: Symantec Time Stamping Services CA - G2
Issued by: Thawte Timestamping CA
Expires: Thu Dec 31 02:59:59 2020
SHA1 hash: 6C07453FFDDA08B83707C09B82FB3D15F35336B1
Issued to: Symantec Time Stamping Services Signer - G4
Issued by: Symantec Time Stamping Services CA - G2
Expires: Wed Dec 30 02:59:59 2020
SHA1 hash: 65439929B67973EB192D6FF243E6767ADF0834E4
SignTool Error: WinVerifyTrust returned error: 0x800B010A
A certificate chain could not be built to a trusted root authority.
Number of files successfully Verified: 0
Number of warnings: 0
Number of errors: 1
「信頼されたルート機関への証明書チェーンを構築できませんでした。」しかし、なぜ?