Подтвердить что ты не робот

Подписанный драйвер INF работает на компьютере, на котором он был подписан, а не на других

Моя компания приобрела Сертификат подписи водителя от Go Daddy. Я использовал его для подписания простого файла INF, который является драйвером для некоторых наших USB-устройств, которые используют Microsoft usbser.sys. Кажется, что все работает на 64-битном компьютере Windows 7, где я его подписал: если я щелкнул правой кнопкой мыши по файлу INF и выберите "Установить", то второе предупреждение, которое я вижу, является хорошим предупреждением, которое показывает правильное имя издателя:

Publisher is correct

Однако, если я перейду на другой компьютер (64-разрядный Windows Vista), щелкните правой кнопкой мыши на INF файле и выберите "Установить", затем я получу это сообщение об ошибке:

Cannot verify publisher

Это заставляет меня думать, что мои драйверы не подписаны должным образом, и единственная причина, по которой это выглядит хорошо на моем компьютере, - это из-за какого-либо корневого/промежуточного/крестного сертификата, который я установил во время процесса установки Go Daddy. Я определенно хочу, чтобы мои пользователи могли видеть, что мы являемся проверенным издателем без необходимости вручную устанавливать сертификат на свой компьютер.

INF файл и файл .cat в том же каталоге.

Кто-нибудь знает, почему это происходит и как я могу это исправить?

Я подозреваю, что основная проблема заключается в том, что я получаю эту ошибку при запуске signtool verify /v pololu.cat (подробнее см. ниже), и я не понял, почему:

Ошибка SignTool: обработана цепочка сертификатов, но завершена в корне сертификат, которому доверенный поставщик не доверяет.

Подробности моей процедуры

Сертификат подписи водителя - это новый продукт Go Daddy, который они запустили несколько недель назад. Я не совсем уверен, как он отличается от Свидетельства о подписании кода, но это та же цена. Я выполнил инструкции на веб-сайте Go Daddy для загрузки и установки сертификата, хотя инструкции не соответствуют действительности. После того как я установил Microsoft Cross Certificate в шаге 1, я увидел красное предупреждающее сообщение, в котором говорилось:

Перед установкой сертификата вы должны использовать Центр обновления Windows для обновления корневых сертификатов или вручную загрузить и установить корневой сертификат из нашего репозитория.

Я не уверен, что с этим делать. Я установил некоторые корневые сертификаты GoDaddy из своего репозитория, но не сделал заметной разницы.

Я установил последнюю версию (8.0) Windows Driver Kit (WDK), а затем установил последнюю версию (8.0) Комплект разработки программного обеспечения для Windows (SDK) для Windows 8. Это дает мне доступ к утилитам inf2cat и signtool. Оба набора были выпущены в течение последнего месяца, поэтому возможно, что могут появиться новые ошибки, на которые мы ступаем.

В новом каталоге я помещаю три файла:

  • pololu_usb_to_serial.inf, файл INF, который я хочу подписать. Это долго, но просто; вы можете прочитать здесь. Этот INF файл является автономным драйвером; никакие другие файлы не нужны в нашем пакете драйверов. Этот файл в основном такой же, как версия, которую наша компания успешно распространила (без знака) в течение многих лет, но мне пришлось внести несколько изменений, чтобы Inf2Cat принял ее.
  • mscvr-cross-gdroot-g2.crt, который я загрузил из репозитория сертификатов Go Daddy. Я считаю, что это сертификат Cross, который доказывает, что корпорация "Go Daddy Root Certificate Authority - G2" доверена Microsoft, но я не совсем уверен, что это правильный сертификат для использования.
  • sign_it.bat, командный файл, который я запускаю для подписания.

Пакетный файл просто содержит:

"C:\Program Files (x86)\Windows Kits\8.0\bin\x86\inf2cat" /v /driver:%~dp0 /os:XP_X86,Vista_X86,Vista_X64,7_X86,7_X64,8_X86,8_X64

"C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool" sign /v /ac "mscvr-cross-gdroot-g2.crt" /n "Pololu Corporation" /t http://tsa.starfieldtech.com pololu.cat

Первая команда вызывает inf2cat из набора драйверов Windows. Опция /v делает ее многословной. Опция /driver:%~dp0 указывает на каталог, содержащий пакетный файл; a . по какой-то причине не работает, и это лучше, чем необходимость жесткого кодирования полного пути. Опция /os указывает все операционные системы, которые я хотел бы поддерживать с помощью этого пакета драйверов. Эта команда создает pololu.cat.

Вторая команда вызывает signtool из комплекта разработки программного обеспечения Windows, чтобы подписать файл каталога. Опция /v делает ее многословной. Параметр /ac указывает, какой перекрестный сертификат используется (см. # 2 выше). Параметр /n указывает имя используемого сертификата (этот сертификат установлен на моем компьютере в соответствии с certmgr.msc). Параметр /t указывает URL-адрес сервера временной метки Go Daddy.

Вот результат в командной строке, когда я запускаю командный файл:

C:\Users\david.POLOLU\Desktop\sign_it>"C:\Program Files (x86)\Windows Kits\8.0\b
in\x86\inf2cat" /v /driver:C:\Users\david.POLOLU\Desktop\sign_it\ /os:XP_X86,Vis
ta_X86,Vista_X64,7_X86,7_X64,8_X86,8_X64
Processing directory (C:\Users\david.POLOLU\Desktop\sign_it\) file (mscvr-cross-
gdroot-g2.crt)
Processing directory (C:\Users\david.POLOLU\Desktop\sign_it\) file (pololu_usb_t
o_serial.inf)
Processing directory (C:\Users\david.POLOLU\Desktop\sign_it\) file (sign_it.bat)

Parsing INF: C:\Users\david.POLOLU\Desktop\sign_it\pololu_usb_to_serial.inf
Finished parsing INFs
Processing INF: C:\Users\david.POLOLU\Desktop\sign_it\pololu_usb_to_serial.inf
Finished processing INFs
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...
Testing driver package...

Signability test complete.

Errors:
None

Warnings:
None

Catalog generation complete.
C:\Users\david.POLOLU\Desktop\sign_it\pololu.cat

C:\Users\david.POLOLU\Desktop\sign_it>"C:\Program Files (x86)\Windows Kits\8.0\b
in\x86\signtool" sign /v /ac "mscvr-cross-gdroot-g2.crt" /n "Pololu Corporation"
 /t http://tsa.starfieldtech.com pololu.cat
The following certificate was selected:
    Issued to: Pololu Corporation
    Issued by: Go Daddy Secure Certificate Authority - G2
    Expires:   Sat Aug 31 11:35:25 2013
    SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

Cross certificate chain (using machine store):
    Issued to: Microsoft Code Verification Root
    Issued by: Microsoft Code Verification Root
    Expires:   Sat Nov 01 06:54:03 2025
    SHA1 hash: 8FBE4D070EF8AB1BCCAF2A9D5CCAE7282A2C66B3

        Issued to: Go Daddy Root Certificate Authority - G2
        Issued by: Microsoft Code Verification Root
        Expires:   Thu Apr 15 13:07:40 2021
        SHA1 hash: 842C5CB34B73BBC5ED8564BDEDA786967D7B42EF

            Issued to: Go Daddy Secure Certificate Authority - G2
            Issued by: Go Daddy Root Certificate Authority - G2
            Expires:   Sat May 03 00:00:00 2031
            SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

                Issued to: Pololu Corporation
                Issued by: Go Daddy Secure Certificate Authority - G2
                Expires:   Sat Aug 31 11:35:25 2013
                SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

Done Adding Additional Store
Successfully signed: pololu.cat

Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0

Как я уже сказал, я сохраняю файлы .cat и .inf в одном каталоге, но они работают только правильно на компьютере, я подписал их.

Проверка с помощью Signtool

Утилита signtool от Microsoft также имеет функцию "проверки", которая позволяет проверить правильность вашей подписи. При проверке можно использовать три политики, каждая из которых дает разные результаты:

  • В политике проверки драйверов Windows говорится, что моя цепочка подписок не возвращается к Microsoft и выводит сообщение об ошибке о том, как мой root не доверяется. Мне кажется, что это проблема.
  • В политике проверки подлинности по умолчанию (/pa) также говорится, что моя цепочка подписок не возвращается к Microsoft, но не дает ошибки.
  • Политика подписи драйвера в режиме ядра (/kp, которая, вероятно, неприменима, потому что я не подписываю драйверы в режиме ядра) говорит, что моя цепочка подписи отслеживает Microsoft и не дает ошибка.

Кто-нибудь знает, какая политика используется Windows для файлов INF? Это, по крайней мере, поможет мне сузить проблему.

Вот полный, подробный вывод из signtool verify:

C:\Users\david.POLOLU\Desktop\sign_it>"C:\Program Files (x86)\Windows Kits\8.0\b
in\x86\signtool" verify /v pololu.cat

Verifying: pololu.cat
Signature Index: 0 (Primary Signature)
Hash of file (sha1): 09A611ECC83E61646DB967D4C23EED725B903C1B

Signing Certificate Chain:
    Issued to: Go Daddy Root Certificate Authority - G2
    Issued by: Go Daddy Root Certificate Authority - G2
    Expires:   Thu Dec 31 16:59:59 2037
    SHA1 hash: 47BEABC922EAE80E78783462A79F45C254FDE68B

        Issued to: Go Daddy Secure Certificate Authority - G2
        Issued by: Go Daddy Root Certificate Authority - G2
        Expires:   Sat May 03 00:00:00 2031
        SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

            Issued to: Pololu Corporation
            Issued by: Go Daddy Secure Certificate Authority - G2
            Expires:   Sat Aug 31 11:35:25 2013
            SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

The signature is timestamped: Wed Sep 05 16:22:34 2012
Timestamp Verified by:
    Issued to: Starfield Services Root Certificate Authority
    Issued by: Starfield Services Root Certificate Authority
    Expires:   Mon Dec 31 16:59:59 2029
    SHA1 hash: 5D003860F002ED829DEAA41868F788186D62127F

        Issued to: Starfield Services Timestamp Authority
        Issued by: Starfield Services Root Certificate Authority
        Expires:   Wed Apr 26 00:00:00 2017
        SHA1 hash: AEAC793CDD107ACFB314A2FE384A8F16840B7C26

SignTool Error: A certificate chain processed, but terminated in a root
        certificate which is not trusted by the trust provider.

Number of files successfully Verified: 0
Number of warnings: 0
Number of errors: 1

C:\Users\david.POLOLU\Desktop\sign_it>"C:\Program Files (x86)\Windows Kits\8.0\b
in\x86\signtool" verify /v /pa pololu.cat

Verifying: pololu.cat
Signature Index: 0 (Primary Signature)
Hash of file (sha1): 09A611ECC83E61646DB967D4C23EED725B903C1B

Signing Certificate Chain:
    Issued to: Go Daddy Root Certificate Authority - G2
    Issued by: Go Daddy Root Certificate Authority - G2
    Expires:   Thu Dec 31 16:59:59 2037
    SHA1 hash: 47BEABC922EAE80E78783462A79F45C254FDE68B

        Issued to: Go Daddy Secure Certificate Authority - G2
        Issued by: Go Daddy Root Certificate Authority - G2
        Expires:   Sat May 03 00:00:00 2031
        SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

            Issued to: Pololu Corporation
            Issued by: Go Daddy Secure Certificate Authority - G2
            Expires:   Sat Aug 31 11:35:25 2013
            SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

The signature is timestamped: Wed Sep 05 16:22:34 2012
Timestamp Verified by:
    Issued to: Starfield Services Root Certificate Authority
    Issued by: Starfield Services Root Certificate Authority
    Expires:   Mon Dec 31 16:59:59 2029
    SHA1 hash: 5D003860F002ED829DEAA41868F788186D62127F

        Issued to: Starfield Services Timestamp Authority
        Issued by: Starfield Services Root Certificate Authority
        Expires:   Wed Apr 26 00:00:00 2017
        SHA1 hash: AEAC793CDD107ACFB314A2FE384A8F16840B7C26


Successfully verified: pololu.cat

Number of files successfully Verified: 1
Number of warnings: 0
Number of errors: 0

C:\Users\david.POLOLU\Desktop\sign_it>"C:\Program Files (x86)\Windows Kits\8.0\b
in\x86\signtool" verify /v /kp pololu.cat

Verifying: pololu.cat
Signature Index: 0 (Primary Signature)
Hash of file (sha1): 09A611ECC83E61646DB967D4C23EED725B903C1B

Signing Certificate Chain:
    Issued to: Go Daddy Root Certificate Authority - G2
    Issued by: Go Daddy Root Certificate Authority - G2
    Expires:   Thu Dec 31 16:59:59 2037
    SHA1 hash: 47BEABC922EAE80E78783462A79F45C254FDE68B

        Issued to: Go Daddy Secure Certificate Authority - G2
        Issued by: Go Daddy Root Certificate Authority - G2
        Expires:   Sat May 03 00:00:00 2031
        SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

            Issued to: Pololu Corporation
            Issued by: Go Daddy Secure Certificate Authority - G2
            Expires:   Sat Aug 31 11:35:25 2013
            SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

The signature is timestamped: Wed Sep 05 16:22:34 2012
Timestamp Verified by:
    Issued to: Starfield Services Root Certificate Authority
    Issued by: Starfield Services Root Certificate Authority
    Expires:   Mon Dec 31 16:59:59 2029
    SHA1 hash: 5D003860F002ED829DEAA41868F788186D62127F

        Issued to: Starfield Services Timestamp Authority
        Issued by: Starfield Services Root Certificate Authority
        Expires:   Wed Apr 26 00:00:00 2017
        SHA1 hash: AEAC793CDD107ACFB314A2FE384A8F16840B7C26

Cross Certificate Chain:
    Issued to: Microsoft Code Verification Root
    Issued by: Microsoft Code Verification Root
    Expires:   Sat Nov 01 06:54:03 2025
    SHA1 hash: 8FBE4D070EF8AB1BCCAF2A9D5CCAE7282A2C66B3

        Issued to: Go Daddy Root Certificate Authority - G2
        Issued by: Microsoft Code Verification Root
        Expires:   Thu Apr 15 13:07:40 2021
        SHA1 hash: 842C5CB34B73BBC5ED8564BDEDA786967D7B42EF

            Issued to: Go Daddy Secure Certificate Authority - G2
            Issued by: Go Daddy Root Certificate Authority - G2
            Expires:   Sat May 03 00:00:00 2031
            SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

                Issued to: Pololu Corporation
                Issued by: Go Daddy Secure Certificate Authority - G2
                Expires:   Sat Aug 31 11:35:25 2013
                SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0


Successfully verified: pololu.cat

Number of files successfully Verified: 1
Number of warnings: 0
Number of errors: 0

Результат выглядел одинаково при запуске на компьютере, где я подписал драйвер (где он работает) и на другом компьютере (где он не работает).

Похожие вопросы по StackOverflow

Подписывание драйвера Thawte для 64-разрядных Windows - решение этой проблемы парня заключалось в том, чтобы добавить директив CatalogFile в файл INF, но у меня уже есть это. (CatalogFile=pololu.cat).

Редактировать # 1: Выполнение подписи исполняемых файлов

Я использовал signtool с теми же параметрами для подписи исполняемого файла (установщик NSIS), и он работал правильно с первой попытки на обоих компьютерах. Поэтому я думаю, что есть что-то другое в политике подписи для файлов драйверов INF, и это то, что меня задевает.

Изменить №2: Предупреждение о сертификате GoDaddy

Если я дважды нажимаю на mscvr-cross-gdroot-g2.crt, на вкладке "Общие" говорится: "У Windows недостаточно информации для проверки этого сертификата". На вкладке "Путь к сертификату" в разделе "Статус сертификата:" говорится: "Эмитент этого сертификата не найден". Я также вижу те же самые предупреждения, если я дважды нажимаю на gd_ms_drv_sign_bundle.p7b (комплект сертификатов из GoDaddy) и открываю первый сертификат.

Предполагается, что эмитентом обоих этих сертификатов является корневой код подтверждения Microsoft. Должен ли я беспокоиться об этом предупреждающем сообщении?

Редактировать # 3: Удаление сертификатов GoDaddy

Линдсей из передовой группы поддержки GoDaddy вернулась ко мне. Она привязалась к этой странице из globalsign, в которой объясняется, как вам нужно удалить корневой и промежуточный сертификаты из своего центра сертификации на компьютер, на котором вы подписываете драйверы, Линдси говорит, что если вы не сделаете этого шага, инструменты подписи будут считать, что эти сертификаты присутствуют на других компьютерах и, следовательно, не включают их в подпись.

Кто-нибудь знает, как проверить, какие сертификаты "импортированы" в подпись? Какие инструменты я могу использовать, чтобы убедиться, что Линдсей и ГлобалСийн прав?

Кстати, у нас есть компьютеры под управлением Windows XP, но Microsoft вскоре перестанет поддерживать эту ОС. Несмотря на то, что GlobalSign говорит, должен быть способ сделать эту работу на Windows 7.

На основании рекомендаций Lindsay я выполнил инструкции от Microsoft до Отключить автоматическое обновление корневых сертификатов, а затем я использовал пользовательский интерфейс certmgr.msc удалить все сертификаты GoDaddy из "Доверенных корневых центров сертификации" и "Промежуточные сертификационные органы". Затем я повторно подписал мой файл inf.

К сожалению, это не сработало! После подписания я дважды проверил, что все сертификаты GoDaddy все еще удалены.

Я не получил никакой обратной связи с GoDaddy на выходе signtool verify или любого ввода, на который политика подписи драйвера я должен проверить при выполнении проверки. Я надеялся, что они смогут просто посмотреть результаты проверки и рассказать мне, что я делаю неправильно, или сказать, какой будет правильный результат.

Для полноты, вот три выхода из signtool verify после того, как я удалил эти сертификаты и перезаписал драйверы:

C:\Users\david.POLOLU\Desktop\sign_inf>"C:\Program Files (x86)\Windows Kits\8.0\
bin\x86\signtool.exe" verify /v pololu.cat

Verifying: pololu.cat
Signature Index: 0 (Primary Signature)
Hash of file (sha1): 5AE4F370471009C8B0ED936C9AE19ED14ABD67D7

Signing Certificate Chain:
    Issued to: Go Daddy Root Certificate Authority - G2
    Issued by: Microsoft Code Verification Root
    Expires:   Thu Apr 15 13:07:40 2021
    SHA1 hash: 842C5CB34B73BBC5ED8564BDEDA786967D7B42EF

        Issued to: Go Daddy Secure Certificate Authority - G2
        Issued by: Go Daddy Root Certificate Authority - G2
        Expires:   Sat May 03 00:00:00 2031
        SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

            Issued to: Pololu Corporation
            Issued by: Go Daddy Secure Certificate Authority - G2
            Expires:   Sat Aug 31 11:35:25 2013
            SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

The signature is timestamped: Wed Sep 12 14:52:19 2012
Timestamp Verified by:
    Issued to: Starfield Services Root Certificate Authority
    Issued by: Starfield Services Root Certificate Authority
    Expires:   Mon Dec 31 16:59:59 2029
    SHA1 hash: 5D003860F002ED829DEAA41868F788186D62127F

        Issued to: Starfield Services Timestamp Authority
        Issued by: Starfield Services Root Certificate Authority
        Expires:   Wed Apr 26 00:00:00 2017
        SHA1 hash: AEAC793CDD107ACFB314A2FE384A8F16840B7C26

SignTool Error: A certificate chain processed, but terminated in a root
        certificate which is not trusted by the trust provider.

Number of files successfully Verified: 0
Number of warnings: 0
Number of errors: 1

C:\Users\david.POLOLU\Desktop\sign_inf>"C:\Program Files (x86)\Windows Kits\8.0\
bin\x86\signtool.exe" verify /v /pa pololu.cat

Verifying: pololu.cat
Signature Index: 0 (Primary Signature)
Hash of file (sha1): 5AE4F370471009C8B0ED936C9AE19ED14ABD67D7

Signing Certificate Chain:
    Issued to: Go Daddy Root Certificate Authority - G2
    Issued by: Microsoft Code Verification Root
    Expires:   Thu Apr 15 13:07:40 2021
    SHA1 hash: 842C5CB34B73BBC5ED8564BDEDA786967D7B42EF

        Issued to: Go Daddy Secure Certificate Authority - G2
        Issued by: Go Daddy Root Certificate Authority - G2
        Expires:   Sat May 03 00:00:00 2031
        SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

            Issued to: Pololu Corporation
            Issued by: Go Daddy Secure Certificate Authority - G2
            Expires:   Sat Aug 31 11:35:25 2013
            SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

The signature is timestamped: Wed Sep 12 14:52:19 2012
Timestamp Verified by:
    Issued to: Starfield Services Root Certificate Authority
    Issued by: Starfield Services Root Certificate Authority
    Expires:   Mon Dec 31 16:59:59 2029
    SHA1 hash: 5D003860F002ED829DEAA41868F788186D62127F

        Issued to: Starfield Services Timestamp Authority
        Issued by: Starfield Services Root Certificate Authority
        Expires:   Wed Apr 26 00:00:00 2017
        SHA1 hash: AEAC793CDD107ACFB314A2FE384A8F16840B7C26

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

C:\Users\david.POLOLU\Desktop\sign_inf>"C:\Program Files (x86)\Windows Kits\8.0\
bin\x86\signtool.exe" verify /v /kp pololu.cat

Verifying: pololu.cat
Signature Index: 0 (Primary Signature)
Hash of file (sha1): 5AE4F370471009C8B0ED936C9AE19ED14ABD67D7

Signing Certificate Chain:
    Issued to: Go Daddy Root Certificate Authority - G2
    Issued by: Microsoft Code Verification Root
    Expires:   Thu Apr 15 13:07:40 2021
    SHA1 hash: 842C5CB34B73BBC5ED8564BDEDA786967D7B42EF

        Issued to: Go Daddy Secure Certificate Authority - G2
        Issued by: Go Daddy Root Certificate Authority - G2
        Expires:   Sat May 03 00:00:00 2031
        SHA1 hash: 27AC9369FAF25207BB2627CEFACCBE4EF9C319B8

            Issued to: Pololu Corporation
            Issued by: Go Daddy Secure Certificate Authority - G2
            Expires:   Sat Aug 31 11:35:25 2013
            SHA1 hash: E2FE1275AD8DA85DEABA67ADE26BE42E0834B4C0

The signature is timestamped: Wed Sep 12 14:52:19 2012
Timestamp Verified by:
    Issued to: Starfield Services Root Certificate Authority
    Issued by: Starfield Services Root Certificate Authority
    Expires:   Mon Dec 31 16:59:59 2029
    SHA1 hash: 5D003860F002ED829DEAA41868F788186D62127F

        Issued to: Starfield Services Timestamp Authority
        Issued by: Starfield Services Root Certificate Authority
        Expires:   Wed Apr 26 00:00:00 2017
        SHA1 hash: AEAC793CDD107ACFB314A2FE384A8F16840B7C26

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: раздел DefaultInstall - это no-no

В документации раздела DefaultInstall от Microsoft я обнаружил это:

Примечание INF файл пакета драйвера не должен содержать INF DefaultInstall, если пакет драйвера должен быть в цифровом виде подписан.

Кто-нибудь знает, почему это так? Я не мог найти объяснения.

В любом случае, я достал раздел DefaultInstall моего INF файла, поэтому с этого момента я должен его протестировать, запустив небольшую DLL, которую я написал, которая вызывает SetupCopyOemInf.

По-прежнему не повезло; Я продолжаю получать предупреждение непроверенного издателя на компьютере с Windows Vista.

Изменить # 5: драйвер JLink правильно подписан

Я кусал в C:\Windows\System32\DriverStore\FileRepository, чтобы попытаться найти некоторые правильно подписанные пакеты драйверов. Первый интересный, который я нашел, - JLinkCDC.cat/JLinkCDC.inf. Версия файла Inf - DriverVer=01/25/2012,6.0.2600.4. На машине Windows Vista, если я вызываю SetupCopyOemInf в inf файле (используя мою DLL), тогда я получаю сообщение о том, кто является издателем (Segger GMBH или что-то в этом роде). Таким образом, можно правильно подписать пакеты драйверов, как мои, но почему-то GoDaddy или я что-то не так.

Драйвер JLinkCDC.inf очень похож на мой драйвер, потому что это всего лишь один файл и использует usbser.sys. Цепочка доверия их подписи возвращается в VeriSign Class 3 Public Primary Certificate Authority - G5.

В основном, этот драйвер JLinkCDC похож на мой, и он работает, поэтому я планирую внимательно посмотреть на него, чтобы узнать, в чем отличия.

вывод проверки signtool для JLinkCDC.cat выглядит очень похоже на мой, за исключением того, что он возвращается к Verisign вместо GoDaddy.

Изменить # 6: Незначительные изменения

Чтобы сделать мой драйвер более похожим на JLinkCDC.inf, я добавил DriverPackageType=PlugAndPlay в файл INF, и я сократил имена файлов: теперь файлы называются polser.cat и polser.inf. Еще не повезло!

Изменить # 7: Некоторый успех!

Я думаю, что справедливы следующие вещи: пожалуйста, исправьте меня, если я ошибаюсь:

  • Для пакета драйвера (файл .cat) правильная опция для signtool verify - /pa. Я выхожу из KMCS_Walkthrough.doc.
  • Для пакета драйверов Windows учитывает, что издатель должен быть проверен, если цепочка доверия возвращается к сертификату в папке "Доверенные корневые центры сертификации" в certmgr.msc.
  • Для пакета драйверов вы можете подписывать его с помощью перекрестного сертификата (расширяя цепочку доверия от gdroot-g2.crt до корня проверки кода Microsoft), но Windows, похоже, игнорирует это. Это связано с тем, что корневой корневой код Microsoft Code не является "доверенным корневым центром сертификации".
  • Существуют хранилища сертификатов для текущего пользователя и сертификаты для локального компьютера. Оба они имеют значение, поэтому вы должны использовать оснастку MMC сертификатов для просмотра обоих. Certmgr.msc показывает только те, которые используются для текущего пользователя.
  • Windows следует без проблем добавить "Корневой центр сертификации Go-Daddy-G2" (gdroot-g2.crt) в "Trusted Root Certification Власти" при необходимости, загружая его из Центра обновления Windows, но это не так. Дополнительная информация здесь

Я использовал средство просмотра событий Windows на тестовой машине, чтобы узнать, что произошло. Похоже, что Windows WILL автоматически отправит "Go Daddy Root Certificate Authority - G2", но только после того, как отобразит нежелательный непроверенный диалог предупреждения издателя. Как только пользователь закрывает это диалоговое окно, сертификат извлекается из Центра обновления Windows, поэтому следующая попытка установки должна быть успешной. Интересно, что он автоматически загружает сертификат Starfield (который является корнем в цепочке доверия для моей временной метки) вовремя.

Я получил свою подпись для работы на компьютерах под управлением Windows 7 и Windows Vista, дважды щелкнув gdroot-g2.crt и импортировав ее, прежде чем пытаться установить драйверы. Я увижу, может ли этот процесс быть автоматизирован и добавлен к установщику.

Я нашел пакет драйверов от другой компании (JLinkCDC.cat), который был подписан с сертификатом VeriSign, внедренным в "VeriSign Class 3 Public Primary Certification Authority - G5". Этот сертификат находится на всех компьютерах, на которые я смотрел, поэтому, если вы идете с VeriSign вместо Go Daddy, я думаю, вы можете избежать этой проблемы с помощью Центра обновления Windows.

Я заметил, что сертификаты VeriSign используют SHA1, в то время как мои сертификаты Go Daddy используют SHA256 для алгоритма подписи и алгоритма хеширования подписи. Не уверен, что это важно.

Изменить # 8: запросить Microsoft

См. обсуждение и мой вывод на форумах MSDN: http://social.msdn.microsoft.com/Forums/en-US/wdk/thread/1fede768-7925-4f30-8eef-ce5bd08b0b60

4b9b3361

Ответ 1

Начиная с 9/27/2012, сертификат подписи драйвера GoDaddy не будет работать с Windows Vista или Windows 7. Он будет работать только с Windows 8. Сертификат GoDaddy доступен только с SHA256.

В итоге мы получили его от GlobalSign (MS Authenticode).

Из http://msdn.microsoft.com/en-us/library/windows/hardware/hh967734%28v=vs.85%29.aspx:

Подписывание пакета драйвера с двумя сигнатурами

В некоторых случаях вам может потребоваться подписать пакет драйвера с двумя разные подписи. Например, предположим, что вы хотите, чтобы ваш драйвер запускался в Windows 7 и Windows 8. Windows 8 поддерживает подписи, созданные с помощью алгоритм хэширования SHA256, но Windows 7 этого не делает. Для Windows 7, вам нужна подпись, созданная с помощью алгоритма хэширования SHA1.

2012-09-28 Обновление: GlobalSign работал. Я разрешаю Firefox 15 загружать ссылку GlobalSign (защищен паролем пересылки). Закончился с Firefox, держащим подписанный сертификат, и загрузил 3 других сертификата GlobalSign. Подписанный сертификат был экспортирован из Firefox в файл .p12. Затем все четыре файла дважды щелкнули, чтобы импортировать их в хранилище сертификатов MS, используя автоматические значения по умолчанию. Драйвер и пакет были подписаны и протестированы в Windows 7 Ultimate x64 без каких-либо ошибок подписи драйвера. Драйвер BSoD'd, но это другая проблема.;)

GoDaddy предоставит вам только кредит на веб-сайт минус 15 долларов США и только если вы аннулируете в течение 30 дней с момента покупки.

2016-01-13 Обновление: https://technet.microsoft.com/en-us/library/security/3033929 Microsoft Security Advisory 3033929 Доступность поддержки подписи кодов SHA-2 для Windows 7 и Windows Server 2008 R2 Опубликовано: 10 марта 2015 г. ... В основном вам необходимо установить обновление безопасности в ссылках, предоставляемых Microsoft, которые обычно выполняются автоматически с помощью Центра обновления Windows.

Теперь мы используем сертификаты подписи кода EV от GlobalSign. Предупреждение: SafeSign не работает с службами Windows (например, ведомый buildbot).

Ответ 2

Из-за недостатка репутации я не могу ответить на rcpao ответ, но я хотел опубликовать его в соглашении. Недавно я прошел через аналогичный процесс, пытаясь подписать пакет драйверов Windows 7 с сертификатом подписи драйвера от GoDaddy. Короче говоря, Win7 x64 не будет принимать драйверы - наверняка, из-за хэширования SHA-2, используемого в сертификате GoDaddy.

Пока есть статьи, в которых указано, что Windows 7 совместима с подписью SHA-2, я не думаю, что это относится к подписям драйверов. Определенно есть некоторые двусмысленные тексты, которые делают проблему менее ясной.

Моя компания завершила покупку сертификата подписи DigiCert, который включает в себя подписание режима ядра для драйверов. Он работал так, как ожидалось, и стоимость была сопоставима с GoDaddy.

Ответ 3

Отвечая на мой собственный вопрос:

В итоге я получил сертификат подписи кода от Go Daddy и назначил его SHA-2 (другой вариант SHA-1), потому что я хотел, чтобы некоторые из дней подписывали пакеты драйверов, содержащие файлы .sys и GoDaddy SHA-2 позволяет вам это сделать. Теперь я подписываю наши .cat файлы с помощью этого сертификата вместе с Go Daddy G1 to G2 Cross Certificate (gdroot-g2_cross.crt), поэтому цепочка доверия выглядит так:

  • Сертификационный центр Go Daddy Class 2 (27 96 ba e6 3f 18 01 e2 77 26 1b a0 d7 77 70 02 8f 20 ee e4) (будет доверенным корневым центром сертификации на вашем компьютере пользователя).
  • Go Daddy Root Certificate Authority - G2 (84 1d 4a 9f c9 d3 b2 f0 ca 5f ab 95 52 5a b2 06 6a cf 83 22) (предполагается, что это доверенный корневой центр сертификации, но он надежно зависит от Windows Update)
  • Go Daddy Secure Certificate Authority - G2 (27 ac 93 69 fa f2 52 07 bb 26 27 ce fa cc be 4e f9 c3 19 b8)
  • Наша компания

Это работает отлично для наших нужд, но , к сожалению, этот план не позволяет нам подписывать пакеты драйверов, содержащие файлы .sys в режиме ядра.. цепочка доверия не внедрена в корневой код подтверждения Microsoft. Основываясь на моем чтении kmsigning.doc, правильный способ подписать ваш .cat файл, если у вас есть файлы драйверов в режиме ядра, заключается в использовании Microsoft to Go Daddy G2 Cross Certificate (mscvr-cross-gdroot-g2.crt). На самом деле я не получил этого, но это будет еще одна дискуссия.

SHA 2

Я должен уважительно не соглашаться с rcpao и kris. Насколько я могу судить, проблема с SHA256 в Windows Vista или Windows 7, , по крайней мере, с целью установки пакета драйверов. Для загрузки файла .sys в ядро ​​может быть другая история, и особенно потому, что у меня возникают проблемы с подпиской .sys, теперь мне придется изучить это.

DefaultInstall

Документация MSDN раздела INF DefaultInstall - это просто неправильно. Кажется, нет никакой несовместимости между DefaultInstall и подписью драйвера, и теперь я вижу причину, по которой это должно быть.

Ответ 4

Похоже, вам нужно, чтобы ваш драйвер был сертифицирован и подписан Microsoft, что может быть достигнуто с помощью Hardware Certification Kit (HCK). Но для Windows 10 и выше они используют Hardware Lab Kit (HLK). Вот как я подписал драйверы режима ядра, который выполняется после прохождения тестирования, и Microsoft сертифицирует и подписывает файлы .sys и .cat.