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

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

Publisher is correct

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

Cannot verify publisher

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

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

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

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

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

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

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

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

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

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

в новый каталог, я положил три файла:

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

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

"C:Program Files (x86)Windows Kits.0binx86inf2cat" /v /driver:%~dp0 /os:XP_X86,Vista_X86,Vista_X64,7_X86,7_X64,8_X86,8_X64

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

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

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

вот вывод в командной строке при запуске пакетного файла:

C:Usersdavid.POLOLUDesktopsign_it>"C:Program Files (x86)Windows Kits.0b
inx86inf2cat" /v /driver:C:Usersdavid.POLOLUDesktopsign_it /os:XP_X86,Vis
ta_X86,Vista_X64,7_X86,7_X64,8_X86,8_X64
Processing directory (C:Usersdavid.POLOLUDesktopsign_it) file (mscvr-cross-
gdroot-g2.crt)
Processing directory (C:Usersdavid.POLOLUDesktopsign_it) file (pololu_usb_t
o_serial.inf)
Processing directory (C:Usersdavid.POLOLUDesktopsign_it) file (sign_it.bat)

Parsing INF: C:Usersdavid.POLOLUDesktopsign_itpololu_usb_to_serial.inf
Finished parsing INFs
Processing INF: C:Usersdavid.POLOLUDesktopsign_itpololu_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:Usersdavid.POLOLUDesktopsign_itpololu.cat

C:Usersdavid.POLOLUDesktopsign_it>"C:Program Files (x86)Windows Kits.0b
inx86signtool" 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

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

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

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

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

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

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

C:Usersdavid.POLOLUDesktopsign_it>"C:Program Files (x86)Windows Kits.0b
inx86signtool" 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:Usersdavid.POLOLUDesktopsign_it>"C:Program Files (x86)Windows Kits.0b
inx86signtool" 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:Usersdavid.POLOLUDesktopsign_it>"C:Program Files (x86)Windows Kits.0b
inx86signtool" 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).

Edit #1: подписание исполняемых файлов работает

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

правка #2: Предупреждение о сертификате GoDaddy

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

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

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

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

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

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

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

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

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

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

C:Usersdavid.POLOLUDesktopsign_inf>"C:Program Files (x86)Windows Kits.0
binx86signtool.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:Usersdavid.POLOLUDesktopsign_inf>"C:Program Files (x86)Windows Kits.0
binx86signtool.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:Usersdavid.POLOLUDesktopsign_inf>"C:Program Files (x86)Windows Kits.0
binx86signtool.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

Edit #4: раздел DefaultInstall является no-no

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

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

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

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

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

Edit #5: драйвер JLink подписан правильно

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

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

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

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

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

чтобы сделать мой драйвер больше похожим на JLinkCDC.inf-файл, я добавил DriverPackageType=PlugAndPlay к INF-файлу, и я сократил имена файлов: файлы теперь называются polser.Кэт и полсер.бесконечность. Все равно не повезло!

Edit #7: некоторый успех!

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

  • для пакета драйверов (.cat file), правильный вариант для signtool verify и /pa. Я делаю вывод это от KMCS_Walkthrough.док!--38-->.
  • для пакета драйверов Windows считает, что издатель должен быть проверен, только если цепочка доверия возвращается к сертификату в папке "Доверенные корневые центры сертификации" в certmgr.магистр.
  • для пакета драйверов вы можете подписать его перекрестным сертификатом (расширение цепочки доверия от gdroot-g2.crt для корня проверки кода Microsoft), но Windows, похоже, игнорирует это. Это потому что Microsoft Code Verification Root не является "доверенным корневым центром сертификации".
  • существуют хранилища сертификатов для текущего пользователя и сертификаты для локального компьютера. Оба из них имеют значение, поэтому вы должны использовать оснастка MMC сертификаты для просмотра. Команду certmgr.КБМ отображается только для текущего пользователя.
  • Windows должны плавно добавить "Go Daddy Root Certificate Authority - G2" (gdroot-g2.crt) в " доверенный корень Папка" центры сертификации " при необходимости загружает ее из Центра Обновления Windows, но это не так. подробнее здесь.

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

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

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

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

Edit #8: попросил Microsoft о помощи

см. Обсуждение и мое заключение на форумах MSDN: http://social.msdn.microsoft.com/Forums/en-US/wdk/thread/1fede768-7925-4f30-8eef-ce5bd08b0b60

4 ответов


по состоянию на 27.09.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:

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

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

2012-09-28 обновление: GlobalSign работал. Я позволил Firefox 15 загрузить ссылку GlobalSign (защищенную пикапом Пароль.) В конечном итоге Firefox держит подписанный сертификат и загружает 3 других сертификата GlobalSign. Подписанный сертификат был экспортирован из Firefox в a .файл 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 slave).


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

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

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


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

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

  1. Go Daddy Class 2 Центр сертификации (27 96 ba e6 3f 18 01 e2 77 26 1b a0 d7 77 70 02 8f 20 ee e4) (будет доверенным корневым ЦС на компьютере пользователя)
  2. 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, работающего надежно)
  3. 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)
  4. наша компания

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

SHA 2

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

DefaultInstall

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


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