Подпись драйвера на Win7x64
От: -prus-  
Дата: 13.12.14 09:54
Оценка:
Всем привет!

Есть купленный сертификат (продленный, ранее им подписывали драйверы) и собственно пытаюсь подписать драйвер для Win7x64.
Сам никогда не подписывал и поэтому начал с прочтения следующих материалов:

1. Code Signing Certificate for Microsoft Authenticode Instructions
2. How to sign Microsoft Windows 64-bit kernel-mode software using Code Signing Certificate for Microsoft Authenticode and Code Signing Certificate for Microsoft Office and VBA
3. Kernel-Mode Code Signing Walkthrough
4. Cross-Certificates for Kernel Mode Code Signing
еще что-то...

Импортировал .pfx в личное хранилище. Скачал кросс-сертификат MSCV-VSClass3.cer отсюда и подписываю так:

signtool sign /v /ac "D:\Develop\very_sign\very_sign\MSCV-VSClass3.cer" /s MY /n "Company" /t http://timestamp.VeriSign.com/scripts/timstamp.dll "D:\Develop\drv\objfre_win7_amd64\amd64\drv.sys"
signtool verify /v /kp "D:\Develop\drv\objfre_win7_amd64\amd64\drv.sys"


В результате все подписывается и проходит успешно верификацию. Смотрю свойства драйвера -> Цефровые подписи — подпись есть.
Далее пытаюсь установить на Win7x64 утилиткой InstDriver. Все утанавливается, но через некоторое время всплывает окно, что типа что-то неподписанное тут установилось и драйвер не запускается естественно. В EventViewer'e вижу сообщение:

Имя журнала: Microsoft-Windows-CodeIntegrity/Operational
Источник: Microsoft-Windows-CodeIntegrity
Дата: 13.12.2014 13:17:45
Код события: 3004
Категория задачи: (1)
Уровень: Ошибка
Описание:
Windows is unable to verify the image integrity of the file \Device\HarddiskVolume2\drv\drv.sys because file hash could not be found on the system. A recent hardware or software change might have installed a file that is signed incorrectly or damaged, or that might be malicious software from an unknown source.

Также я не нашел на сайте MS соответствующий моему Root-сертификату кросс-сертификат по Thumbprint.

Подскажите, что может быть не так?
Буду крайне благодарен...
С уважением,
Евгений
Re: Подпись драйвера на Win7x64
От: okman Беларусь https://searchinform.ru/
Дата: 13.12.14 10:22
Оценка:
Здравствуйте, -prus-, Вы писали:

P>...

P>Подскажите, что может быть не так?

По описанию похоже на то, что используется неправильный кросс-сертификат.
Хотя почему тогда signtool verify /kp молчит ?..

Посмотри в свойствах обоих сертификатов, — корневого (именно корневого!) и
кросс-сертификата, — их поля subject identifier, насколько я помню, должны совпадать.
Re[2]: Подпись драйвера на Win7x64
От: -prus-  
Дата: 13.12.14 10:31
Оценка:
Здравствуйте, okman, Вы писали:

O>Посмотри в свойствах обоих сертификатов, — корневого (именно корневого!) и

O>кросс-сертификата, — их поля subject identifier, насколько я помню, должны совпадать.

У меня во такое дерево:

VerySign -> VeriSign Class 3 Code Signing 2010 CA -> Тут купленный сертификат.
У VerySign и VeriSign Class 3 Code Signing 2010 CA разные "Идентификаторы ключа субъекта". Это если я то посмотрел
С уважением,
Евгений
Re[3]: Подпись драйвера на Win7x64
От: okman Беларусь https://searchinform.ru/
Дата: 13.12.14 10:34
Оценка:
Здравствуйте, -prus-, Вы писали:

P>VerySign -> VeriSign Class 3 Code Signing 2010 CA -> Тут купленный сертификат.

P>У VerySign и VeriSign Class 3 Code Signing 2010 CA разные "Идентификаторы ключа субъекта". Это если я то посмотрел

Напиши, какой у тебя "идентификатор ключа субъекта" корневого сертификата.
Re[4]: Подпись драйвера на Win7x64
От: -prus-  
Дата: 13.12.14 10:36
Оценка:
Здравствуйте, okman, Вы писали:

O>Напиши, какой у тебя "идентификатор ключа субъекта" корневого сертификата.


7f d3 65 a7 c2 dd ec bb f0 30 09 f3 43 39 fa 02 af 33 31 33
С уважением,
Евгений
Re[5]: Подпись драйвера на Win7x64
От: okman Беларусь https://searchinform.ru/
Дата: 13.12.14 10:40
Оценка: 2 (1)
Здравствуйте, -prus-, Вы писали:

P>Здравствуйте, okman, Вы писали:


O>>Напиши, какой у тебя "идентификатор ключа субъекта" корневого сертификата.


P>7f d3 65 a7 c2 dd ec bb f0 30 09 f3 43 39 fa 02 af 33 31 33


Попробуй вот этот кросс-сертификат:

VeriSign Class 3 Public Primary Certification Authority – G5
http://go.microsoft.com/fwlink/?LinkId=321787
Re[6]: Подпись драйвера на Win7x64
От: -prus-  
Дата: 13.12.14 10:46
Оценка:
Здравствуйте, okman, Вы писали:

O>Попробуй вот этот кросс-сертификат:

O>VeriSign Class 3 Public Primary Certification Authority – G5
O>http://go.microsoft.com/fwlink/?LinkId=321787

Тоже самое, ошибка и не запускается . А сам кросс импортировать нужно куда или достаточно просто в параметрах SignTool его указывать?
С уважением,
Евгений
Re[7]: Подпись драйвера на Win7x64
От: okman Беларусь https://searchinform.ru/
Дата: 13.12.14 10:49
Оценка:
Здравствуйте, -prus-, Вы писали:

P>Здравствуйте, okman, Вы писали:


O>>Попробуй вот этот кросс-сертификат:

O>>VeriSign Class 3 Public Primary Certification Authority – G5
O>>http://go.microsoft.com/fwlink/?LinkId=321787

P>Тоже самое, ошибка и не запускается .


А сам кросс импортировать нужно куда или достаточно просто в параметрах SignTool его указывать?

Достаточно указать его через опцию /ac.
Я подписываю так, например:
signtool.exe sign /n "CompanyName" /ac "D:\System\CodeSigning\cross.crt" /t timestamp-url путь-к-файлу
Re[8]: Подпись драйвера на Win7x64
От: -prus-  
Дата: 13.12.14 10:52
Оценка:
Здравствуйте, okman, Вы писали:

O>Достаточно указать его через опцию /ac.

O>Я подписываю так, например:
O>
O>signtool.exe sign /n "CompanyName" /ac "D:\System\CodeSigning\cross.crt" /t timestamp-url путь-к-файлу
O>

Да, так и делаю... Не работает пока
У меня система, на которой подписываю, win7x64 и ей уже где-то 3 года без перестановки. Товарищ предложил на чистой системе свежей все тоже самое попробовать. Это имеет какой-то смысл и обоснование?
С уважением,
Евгений
Re[9]: Подпись драйвера на Win7x64
От: okman Беларусь https://searchinform.ru/
Дата: 13.12.14 11:01
Оценка: 4 (1)
Здравствуйте, -prus-, Вы писали:

P>Да, так и делаю... Не работает пока

P>У меня система, на которой подписываю, win7x64 и ей уже где-то 3 года без перестановки. Товарищ предложил на чистой системе свежей все тоже самое попробовать. Это имеет какой-то смысл и обоснование?

Посмотри здесь:

Unknown publisher error occurs after signing files with a Code Signing Certificate for Microsoft Authenticode issued after October 10th, 2010
https://knowledge.verisign.com/support/code-signing-support/index?page=content&id=SO16958&actp=search&viewlocale=en_US&searchid=1313006972482

Problem

Unknown publisher error occurs after signing files with a Code Signing Certificate for Microsoft Authenticode. Error occurs during download process on some devices/client machines

Cause

The Code signing certification path was updated on October 10th, 2010 to include two intermediate CA's.

This creates two possible certification paths — one terminating at the G5 Root and the other terminating at the G1.3/G1.5 Root (depending on which is installed on the client machine).

The Unknown publisher error can/will occur if the signature on the application only includes the End Entity certificate>G3 Intermediate CA.

A signature block that only contains End Entity certificate>G3 Intermediate CA requires the validating device to have the G5 root installed.

Not all client machines or devices have the G5 Root certificate installed.

Resolution

For backwards compatibility when validating a signed file the developer that is signing the code must include both intermediate CA's within the signature block. To ensure that a proper signature is applied to the signed code do the following:

Install both Code Signing Intermediates CA's on the machine used to sign the code — Click HERE to download the code signing CA's

Disable the G5 Root certificate from the signing machine.
To disable the G5 Root do the following:
Locate and Disable the VeriSign Class 3 Public Primary Certification Authority — G5 Root CA certificate

Create a Certificate Snap-In in Microsoft Management Console (MMC). Please see the following solution for information on this: SO6127
With the MMC and the Certificates snap-in open, expand the Trusted Root Certification Authorities folder on the left and select the Certificates sub-folder.
Locate the following certificate:
Issued to: VeriSign Class 3 Public Primary Certification Authority — G5
Issued by: VeriSign Class 3 Public Primary Certification Authority — G5
Expiration Date: 7/16/2036
Serial Number: 18 da d1 9e 26 7d e8 bb 4a 21 58 cd cc 6b 3b 4a


If this certificate is present, it must be disabled.
Right click the certificate
Select Properties
In the Certificate purposes section, select Disable all purposes for this certificate



Click the OK button
Close the MMC — there is no need to save console settings


Import the two intermediate certificates previously downloaded:
Issued to: VeriSign Class 3 Code Signing 2010 CA
Issued by: VeriSign Class 3 Public Primary Certification Authority — G5
Valid from: 2/7/2010 to 2/7/2020
Serial Number: 52 00 e5 aa 25 56 fc 1a 86 ed 96 c9 d4 4b 33 c7

and

Issued to: VeriSign Class 3 Public Primary Certification Authority — G5
Issued by: Class 3 Public Primary Certification Authority
Valid from: 11/7/2006 to 11/7/2021
Serial Number: 25 0c e8 e0 30 61 2e 9f 2b 89 f7 05 4d 7c f8 fd


The Code Signing Certificate for Microsoft Authenticode now has a complete chain of trust. Please re-sign your files.
Note: If you reference a PFX file to sign your files, please the following solution to generate a new PFX file: SO9777


Я так понял, у них там два сертификата G5 — один до 2021 года, второй до 2036, и при подписи
включается "не тот".
Re[10]: Подпись драйвера на Win7x64
От: -prus-  
Дата: 13.12.14 11:12
Оценка:
Здравствуйте, okman, Вы писали:

O>Я так понял, у них там два сертификата G5 — один до 2021 года, второй до 2036, и при подписи

O>включается "не тот".

По ссылке не могу перейти... А где взять эти intermediate certificates?
С уважением,
Евгений
Re[11]: Подпись драйвера на Win7x64
От: okman Беларусь https://searchinform.ru/
Дата: 13.12.14 11:23
Оценка:
Здравствуйте, -prus-, Вы писали:

P>По ссылке не могу перейти...


Попытка №2...
https://knowledge.verisign.com/support/code-signing-support/index?page=content&id=SO16958&actp=search&viewlocale=en_US&searchid=1313006972482
Re[12]: Подпись драйвера на Win7x64
От: -prus-  
Дата: 13.12.14 11:34
Оценка:
Здравствуйте, okman, Вы писали:

O>Попытка №2...

O>
O>https://knowledge.verisign.com/support/code-signing-support/index?page=content&id=SO16958&actp=search&viewlocale=en_US&searchid=1313006972482
O>


Их и Primary и Secondary у обоих нужно импортировать?
С уважением,
Евгений
Re[12]: Подпись драйвера на Win7x64
От: -prus-  
Дата: 13.12.14 11:53
Оценка:
Здравствуйте, okman, Вы писали:

O>Попытка №2...

O>
O>https://knowledge.verisign.com/support/code-signing-support/index?page=content&id=SO16958&actp=search&viewlocale=en_US&searchid=1313006972482
O>


Отключил сертификат, который до 2036 года как описано. Импорторовал промежуточные сертификаты. Теперь дерево выглядит так:
VeriSign Class 3 Public Primary CA -> VeriSign Class 3 Public Primary Certification Authority — G5 -> VeriSign Class 3 Code Signing 2010 CA -> Тут купленереподписалный сертификат.
Подписал снова и все тоже самое
С уважением,
Евгений
Re: Подпись драйвера на Win7x64
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 13.12.14 12:21
Оценка: 2 (1)
Здравствуйте, -prus-, Вы писали:

P>Windows is unable to verify the image integrity of the file \Device\HarddiskVolume2\drv\drv.sys because file hash could not be found on the system. A recent hardware or software change might have installed a file that is signed incorrectly or damaged, or that might be malicious software from an unknown source.


Недавно вышло кривое обновление от Microsoft — KB3004394, которое обновляет корневые сертификаты, но в процессе что-то сильно ломает (детально не разбирался). Сейчас оно уже отозвано, но, может, успело установиться на эту машину и приводит к таким вот эффектам?
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[2]: Подпись драйвера на Win7x64
От: -prus-  
Дата: 13.12.14 12:25
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Недавно вышло кривое обновление от Microsoft — KB3004394, которое обновляет корневые сертификаты, но в процессе что-то сильно ломает (детально не разбирался). Сейчас оно уже отозвано, но, может, успело установиться на эту машину и приводит к таким вот эффектам?


Сейчас установлю на виртуалку чистую Win7x64, попробую там подписать... Отпишу по результатам...
С уважением,
Евгений
Re: Подпись драйвера на Win7x64
От: Ivan Россия www.rsdn.ru
Дата: 13.12.14 12:45
Оценка: 12 (1)
Здравствуйте, -prus-, Вы писали:

P>Есть купленный сертификат (продленный, ранее им подписывали драйверы) и собственно пытаюсь подписать драйвер для Win7x64.

P>Далее пытаюсь установить на Win7x64 утилиткой InstDriver. Все утанавливается, но через некоторое время всплывает окно, что типа что-то неподписанное тут установилось и драйвер не запускается естественно.

Какой алгоритм подписи (signature hash algorithm) указан в сертификате? Verisign сейчас позволяет выпускать сертификаты с sha2, а на Windows 7 этот алгоритм в ядре ОС не поддерживается. Поэтому подпись выглядит действительной, проходит все проверки, а при попытке старта драйвера — ядро отказывается его загружать.
Если дело в этом, необходимо перевыпустить сертификат с sha1.

Есть патч для Windows 7 для поддержки sha2, но от сейчас отозван: https://technet.microsoft.com/en-us/library/security/2949927
см. также: https://support.globalsign.com/customer/portal/articles/1499561-sha-256-compatibility#14
Re[2]: Подпись драйвера на Win7x64
От: -prus-  
Дата: 13.12.14 12:51
Оценка:
Здравствуйте, Ivan, Вы писали:

I>Какой алгоритм подписи (signature hash algorithm) указан в сертификате? Verisign сейчас позволяет выпускать сертификаты с sha2, а на Windows 7 этот алгоритм в ядре ОС не поддерживается. Поэтому подпись выглядит действительной, проходит все проверки, а при попытке старта драйвера — ядро отказывается его загружать.

I>Если дело в этом, необходимо перевыпустить сертификат с sha1.

I>Есть патч для Windows 7 для поддержки sha2, но от сейчас отозван: https://technet.microsoft.com/en-us/library/security/2949927

I>см. также: https://support.globalsign.com/customer/portal/articles/1499561-sha-256-compatibility#14

В письме, которое вместе с сертификатом пришло, написано: Hashing Algorithm: SHA2 with a 256-bit Digest
Это его перезапрашивать на SHA1 нужно? И как точно убедится, что это из-за этого?
С уважением,
Евгений
Re[3]: Подпись драйвера на Win7x64
От: Ivan Россия www.rsdn.ru
Дата: 13.12.14 13:00
Оценка: 4 (1)
Здравствуйте, -prus-, Вы писали:

P>Здравствуйте, Ivan, Вы писали:


I>>Какой алгоритм подписи (signature hash algorithm) указан в сертификате? Verisign сейчас позволяет выпускать сертификаты с sha2, а на Windows 7 этот алгоритм в ядре ОС не поддерживается. Поэтому подпись выглядит действительной, проходит все проверки, а при попытке старта драйвера — ядро отказывается его загружать.

I>>Если дело в этом, необходимо перевыпустить сертификат с sha1.

I>>Есть патч для Windows 7 для поддержки sha2, но от сейчас отозван: https://technet.microsoft.com/en-us/library/security/2949927

I>>см. также: https://support.globalsign.com/customer/portal/articles/1499561-sha-256-compatibility#14

P>В письме, которое вместе с сертификатом пришло, написано: Hashing Algorithm: SHA2 with a 256-bit Digest



P>Это его перезапрашивать на SHA1 нужно?

Да, имеет смысл перевыпустить сертификат, выбрав алгоритм SHA1.

P>И как точно убедится, что это из-за этого?

Сообщения об ошибке от ОС в этом случае неинформативные. Можно поискать файлы отозванного патча 2949927, недавно еще находились, и установить его. После этого драйвер должен успешно стартовать. И попробовать установить драйвер на Windows 8, там поддержка SHA2 в ядре есть.
Re[4]: Подпись драйвера на Win7x64
От: -prus-  
Дата: 13.12.14 14:36
Оценка:
Здравствуйте, Ivan, Вы писали:

I>Да, имеет смысл перевыпустить сертификат, выбрав алгоритм SHA1.


Человек, который сертификит этот получал вроде в админке Symantec'a нашел возможность перевыпуска сертификата.
Эта процедура платная или нет?
С уважением,
Евгений
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.