Информация об изменениях

Сообщение Re: подпись kernel драйвера от 04.06.2020 8:23

Изменено 04.06.2020 8:26 okman

Re: подпись kernel драйвера
Здравствуйте, Michael.

На мой взгляд, самый беспроигрышный вариант — это приобрести EV-сертификат, который поддерживает подписывание
ядерного кода (kernel-mode code signing). Не знаю, как сейчас, но раньше при покупке EV можно было сразу взять и
"обычный" (т.е. не EV) сертификат SHA1 для подписывания под старые версии Win, у которых SHA1 или не работает
"из коробки" (Windows 7, Server 2008 R2), или вообще не поддерживается (Vista, Server 2008).

Далее, имея EV-сертификат, нужно будет зарегистрироваться на портале MS (процедура бесплатная).
И после этого можно подписывать свои драйверы любым из трех способов:

Cross-Signing — подписывание "по-старинке" с помощью signtool.exe и кросс-сертификатов.
Сертификаты: standard (SHA1) или EV (SHA256).
Такой драйвер будет работать на всех версиях Windows, включая Windows 10 и Windows Server 2016,
за исключением систем с включенным Secure Boot или Device Guard / HVCI.
Также могут возникнуть проблемы при использовании EV-подписи SHA256 на системах до Windows 8.
Например, на Windows 7 / Windows Server 2008 R2 потребуется установить обновление KB 3033929
(или то, которое его включает), иначе драйвер не будет загружен.

Attestation-Signing — подписывание через портал MS (загрузка .cab-архивов с драйверами на портал MS).
Сертификаты: только EV.
Такой драйвер будет работать только на Windows 10 и Windows Server 2016, но Secure Boot ему не помеха.
На системах с включенным Device Guard / HVCI драйвер может не загрузиться (зависит от политик).

WHQL Signing — подписывание через портал MS после прохождения HLK-тестов.
Сертификаты: только EV.
Драйвер будет работать только на Windows 10 и Windows Server 2016, но с любыми настройками Secure Boot и
Device Guard / HVCI. При этом для WHQL доступны дополнительные "бонусы":

* при первой установке устройства, когда доступны варианты, система всегда отдает предпочтение
драйверу с WHQL-подписью перед всеми остальными.

* возможна неинтерактивная установка (т.н. server-mode installation) без выдачи каких-либо сообщений
пользователю.

* возможны варианты с установкой и обновлением драйвера через Windows Update.

* и др.

> знаю сейчас нужно проходить какую-то процедуру проверки в Windows Hardware Developer Center.

> Кто нибудь проходил? Какие подводные камни?

Главный "подводный камень" — очень запутанная система логинов, профилей, настроек, подписок и т.п. на Microsoft.
Например, ты подписываешь драйверы через портал, а учетные записи для него почему-то настраиваешь в Azure.
Подписку покупаешь на одну учетку, а саму подписку видишь только под другой. И куча всяких терминов вроде appid,
tenantId, key и т.п., можно голову сломать. Драйвер иногда не подписывается по непонятным причинам и нет
нормального диагностического сообщения. Иногда подпись повисает на несколько часов (хотя в другое время проходит
за 10-15 минут). Они (MS) еще имеют привычку раз в несколько месяцев что-то поменять (читай — сломать) и
снова приходится разбираться, как попасть в нужное тебе окно...
Re: подпись kernel драйвера
Здравствуйте, Michael.

На мой взгляд, самый беспроигрышный вариант — это приобрести EV-сертификат, который поддерживает подписывание
ядерного кода (kernel-mode code signing). Не знаю, как сейчас, но раньше при покупке EV можно было сразу взять и
"обычный" (т.е. не EV) сертификат SHA1 для подписывания под старые версии Win, у которых SHA256 или не работает
"из коробки" (Windows 7, Server 2008 R2), или вообще не поддерживается (Vista, Server 2008).

Далее, имея EV-сертификат, нужно будет зарегистрироваться на портале MS (процедура бесплатная).
И после этого можно подписывать свои драйверы любым из трех способов:

Cross-Signing — подписывание "по-старинке" с помощью signtool.exe и кросс-сертификатов.
Сертификаты: standard (SHA1) или EV (SHA256).
Такой драйвер будет работать на всех версиях Windows, включая Windows 10 и Windows Server 2016,
за исключением систем с включенным Secure Boot или Device Guard / HVCI.
Также могут возникнуть проблемы при использовании EV-подписи SHA256 на системах до Windows 8.
Например, на Windows 7 / Windows Server 2008 R2 потребуется установить обновление KB 3033929
(или то, которое его включает), иначе драйвер не будет загружен.

Attestation-Signing — подписывание через портал MS (загрузка .cab-архивов с драйверами на портал MS).
Сертификаты: только EV.
Такой драйвер будет работать только на Windows 10 и Windows Server 2016, но Secure Boot ему не помеха.
На системах с включенным Device Guard / HVCI драйвер может не загрузиться (зависит от политик).

WHQL Signing — подписывание через портал MS после прохождения HLK-тестов.
Сертификаты: только EV.
Драйвер будет работать только на Windows 10 и Windows Server 2016, но с любыми настройками Secure Boot и
Device Guard / HVCI. При этом для WHQL доступны дополнительные "бонусы":

* при первой установке устройства, когда доступны варианты, система всегда отдает предпочтение
драйверу с WHQL-подписью перед всеми остальными.

* возможна неинтерактивная установка (т.н. server-mode installation) без выдачи каких-либо сообщений
пользователю.

* возможны варианты с установкой и обновлением драйвера через Windows Update.

* и др.

> знаю сейчас нужно проходить какую-то процедуру проверки в Windows Hardware Developer Center.

> Кто нибудь проходил? Какие подводные камни?

Главный "подводный камень" — очень запутанная система логинов, профилей, настроек, подписок и т.п. на Microsoft.
Например, ты подписываешь драйверы через портал, а учетные записи для него почему-то настраиваешь в Azure.
Подписку покупаешь на одну учетку, а саму подписку видишь только под другой. И куча всяких терминов вроде appid,
tenantId, key и т.п., можно голову сломать. Драйвер иногда не подписывается по непонятным причинам и нет
нормального диагностического сообщения. Иногда подпись повисает на несколько часов (хотя в другое время проходит
за 10-15 минут). Они (MS) еще имеют привычку раз в несколько месяцев что-то поменять (читай — сломать) и
снова приходится разбираться, как попасть в нужное тебе окно...