5

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 は、エラーはないと言いました。しかし、デジタル署名の詳細には、「署名内の証明書を検証できません」というメッセージがあります。認定パスはありません。

詳細には、 「失効ステータス:失効サーバーがオフラインだったため、失効機能は失効を確認できませんでした」というプロパティ「拡張エラー情報」があります。

Application.exe イメージ

問題を調査するために、アプリケーションで 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

「信頼されたルート機関への証明書チェーンを構築できませんでした。」しかし、なぜ?

4

3 に答える 3

3

Thawte の証明書を使用したファイルの署名に関する記事を見つけました: http://codingexpedition.wordpress.com/2011/04/21/thawte-code-signing-pfx/

/ac signtool オプションは常に必要なようです。そのため、Thawte 証明書を .cer ファイルに抽出し、/ac パラメータで適用しました。

openssl pkcs12 -in company.pfx -out company_ca.pem -nokeys -cacerts
openssl x509 -in company_ca.pem -out company_ca.cer -outform DER
signtool sign /ac company_ca.cer /p password /f company.pfx /t timeserver /v Application.exe

そして、それはうまくいきます!

于 2013-03-29T21:51:04.323 に答える
0

This issue might be because of missing intermediate certificate. Compare the certificate in both machines (by double click on same machine) and observe Certificate path tab. If any intermediate certificate node is missing then export the same certificate from old machine and import it on new machine.

于 2014-12-18T08:31:30.173 に答える