Моя компания приобрела Сертификат подписи водителя от Go Daddy. Я использовал его для подписания простого файла INF, который является драйвером для некоторых наших USB-устройств, которые используют Microsoft usbser.sys. Кажется, что все работает на 64-битном компьютере Windows 7, где я его подписал: если я щелкнул правой кнопкой мыши по файлу INF и выберите "Установить", то второе предупреждение, которое я вижу, является хорошим предупреждением, которое показывает правильное имя издателя:
Однако, если я перейду на другой компьютер (64-разрядный Windows Vista), щелкните правой кнопкой мыши на INF файле и выберите "Установить", затем я получу это сообщение об ошибке:
Это заставляет меня думать, что мои драйверы не подписаны должным образом, и единственная причина, по которой это выглядит хорошо на моем компьютере, - это из-за какого-либо корневого/промежуточного/крестного сертификата, который я установил во время процесса установки 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