【问题标题】:"The certificate in the signature cannot be verified" for Thawte certificateThawte 证书的“签名中的证书无法验证”
【发布时间】:2023-04-24 01:26:02
【问题描述】:

我需要使用存储在 company.pfx 中的证书对 Application.exe 文件进行签名。所以,我使用了signtool:

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 image

为了调查问题,我在应用程序上使用了 sigcheck(-a 密钥),它显示 “已验证:无法将证书链构建到受信任的根授权机构。”

然后我已经将pfx文件导入repository,证书好像没问题。

Certificate image

我搜索了有关我的主题的 * 并找到了一些链接,这很有帮助。

How to create PFX with my chain of certificates?

How can I sign an ActiveX control with a code signing certificate and be a verified publisher?

解决方案是从 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

现在数字安全详细信息中的消息是“数字签名正常”。

但我不明白为什么我需要使用 /ac 参数。有人有什么想法吗?


已编辑。

我已经使用 Application.exe 验证了应用程序的第一个版本(没有 /ac),它为我提供了更多信息:

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

“无法为受信任的根授权建立证书链。”但是为什么呢?

【问题讨论】:

标签: openssl digital-signature signtool


【解决方案1】:

我找到了一篇关于使用 Thawte 证书签署文件的文章: http://codingexpedition.wordpress.com/2011/04/21/thawte-code-signing-pfx/

似乎总是需要 /ac 标志工具选项。因此,我已将 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

而且效果很好!

【讨论】:

    【解决方案2】:

    看起来像是在使用旧版本

    C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin\signtool.exe 
    

    也解决了问题。

    【讨论】:

      【解决方案3】:

      这个问题可能是因为缺少中间证书。 比较两台机器上的证书(通过双击同一台机器)并观察证书路径选项卡。如果缺少任何中间证书节点,则从旧机器导出相同的证书并将其导入新机器。

      【讨论】:

        最近更新 更多