"Сертификат в подписи не может быть проверен" для сертификата Thawte

Мне нужно подписать файл Application.exe сертификатом, который хранится в company.pfx. Итак, я использовал 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 изображение

Чтобы исследовать проблему, я использовал sigcheck (-a ключ) в приложении, и он говорит: "Проверено: цепочка сертификатов не может быть построена для доверенного корневого центра".

Затем я импортировал файл pfx в репозиторий, и похоже, что сертификат в порядке.

Изображение сертификата

Я искал stackru по моей теме и нашел несколько ссылок, и это помогает.

Как создать 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

Теперь сообщение в разделе "Сведения о цифровой безопасности" звучит так: "Цифровая подпись в порядке".

Но я не могу понять, почему мне нужно использовать аргумент /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

"Не удалось создать цепочку сертификатов для доверенного корневого центра". Но почему?

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

И это работает отлично!

Похоже, использование более старой версии

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

решает проблему тоже.

Эта проблема может быть из-за отсутствия промежуточного сертификата. Сравните сертификат на обеих машинах (дважды щелкнув на одной машине) и просмотрите вкладку "Путь к сертификату". Если какой-либо промежуточный узел сертификата отсутствует, экспортируйте тот же сертификат со старого компьютера и импортируйте его на новый компьютер.

Другие вопросы по тегам