Всем привет,
для проекта хочу сделать kernel-драйвер (типа виртуальная камера),
знаю сейчас нужно проходить какую-то процедуру проверки в Windows Hardware Developer Center.
Кто нибудь проходил? Какие подводные камни?
Заранее спасибо за ответы
Здравствуйте, Michael, Вы писали: M>для проекта хочу сделать kernel-драйвер (типа виртуальная камера), M>знаю сейчас нужно проходить какую-то процедуру проверки в Windows Hardware Developer Center. M>Кто нибудь проходил? Какие подводные камни? M>Заранее спасибо за ответы
Для старых версий десятки и прошлых поколений Windows подойдет EV либо простой серт от компании у кого есть кросс-сертификат из этого списка (e.g. DigiCert, GlobalSign).
Для последних версий системы нужна подпись MS, ее можно получить только обладая EV-сертификатом. Подписи бывают двух видов:
1) attestation, где просто заливается бинарник драйвера и МС его подписывает. Возможно не будет работать на новых версиях Windows Server согласно документации от МС, хотя в моих тестах работало.
2) HLK — нужно ставить Windows Hardware Lab Kit и проходить через муторную систему тестов. В качестве бонуса получается какая-то сертификация типа Compatible with Windows (R).
Короче говоря если хотите чтобы работало всегда и везде — нужен EV серт и аккаунт в MS. Кроме того, EV серты вроде как не выдаются частным лицам, потому может понадобится еще и компания. Хотя кому-то вроде удавалось получить на ИП.
Здравствуйте, Черный Властелин, Вы писали:
ЧВ>Здравствуйте, Michael, Вы писали: M>>для проекта хочу сделать kernel-драйвер (типа виртуальная камера), M>>знаю сейчас нужно проходить какую-то процедуру проверки в Windows Hardware Developer Center. M>>Кто нибудь проходил? Какие подводные камни? M>>Заранее спасибо за ответы
ЧВ>Для старых версий десятки и прошлых поколений Windows подойдет EV либо простой серт от компании у кого есть кросс-сертификат из этого списка (e.g. DigiCert, GlobalSign).
ЧВ>Для последних версий системы нужна подпись MS, ее можно получить только обладая EV-сертификатом. Подписи бывают двух видов:
ЧВ>1) attestation, где просто заливается бинарник драйвера и МС его подписывает. Возможно не будет работать на новых версиях Windows Server согласно документации от МС, хотя в моих тестах работало.
ЧВ>2) HLK — нужно ставить Windows Hardware Lab Kit и проходить через муторную систему тестов. В качестве бонуса получается какая-то сертификация типа Compatible with Windows (R).
ЧВ>Короче говоря если хотите чтобы работало всегда и везде — нужен EV серт и аккаунт в MS. Кроме того, EV серты вроде как не выдаются частным лицам, потому может понадобится еще и компания. Хотя кому-то вроде удавалось получить на ИП.
понял, спасибо.
позвонил в контору где получал обычный сертификат, действительно говорят для ИП нельзя EV...
вообще интересно может кто подписывает такой софт за возмездно конечно...
товарищ пишет, что получил серт на ИП через GlobalSign всего-то за пару месяцев. Так что, видимо можно.
M>вообще интересно может кто подписывает такой софт за возмездно конечно...
Это все очень стремно, маловероятно что кто-то этим будет заниматься. Подписывателю нужно как-то убедиться, что вы не делаете что-то вредоносное. Но, даже, если и найдется контора, которая этим занимается и подпишет вам драйвер, где гарантия что она не подпишет им кому-то другому малварь и этот серт отзовут (и ваш драйвер станет тыквой)?
На мой взгляд, самый беспроигрышный вариант — это приобрести 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) еще имеют привычку раз в несколько месяцев что-то поменять (читай — сломать) и
снова приходится разбираться, как попасть в нужное тебе окно...
Здравствуйте, okman, Вы писали: O>На мой взгляд, самый беспроигрышный вариант — это приобрести EV-сертификат, который поддерживает подписывание O>ядерного кода (kernel-mode code signing). Не знаю, как сейчас, но раньше при покупке EV можно было сразу взять и O>"обычный" (т.е. не EV) сертификат SHA1 для подписывания под старые версии Win, у которых SHA256 или не работает O>"из коробки" (Windows 7, Server 2008 R2), или вообще не поддерживается (Vista, Server 2008).
Да это так, только многие здесь не имеет никакой компании, а получить EV без компании проблематично. Ну и SHA-1 версия она тоже EV, единственное отличие в алгоритме хеширования. У мну две EV подписи SHA1 и SHA256 от DigiCert.
O> WHQL Signing — подписывание через портал MS после прохождения HLK-тестов. O> Сертификаты: только EV. O> Драйвер будет работать только на Windows 10 и Windows Server 2016, но с любыми настройками Secure Boot и O> Device Guard / HVCI. При этом для WHQL доступны дополнительные "бонусы": O> * возможна неинтерактивная установка (т.н. server-mode installation) без выдачи каких-либо сообщений O> пользователю.
Это справедливо и для attestation. Никаких диалогов "Доверяете ли вы XXX?" не появляется, неважно attestation или HLK.
O>Главный "подводный камень" — очень запутанная система логинов, профилей, настроек, подписок и т.п. на Microsoft. O>Например, ты подписываешь драйверы через портал, а учетные записи для него почему-то настраиваешь в Azure. O>Подписку покупаешь на одну учетку, а саму подписку видишь только под другой. И куча всяких терминов вроде appid, O>tenantId, key и т.п., можно голову сломать. Драйвер иногда не подписывается по непонятным причинам и нет O>нормального диагностического сообщения. Иногда подпись повисает на несколько часов (хотя в другое время проходит O>за 10-15 минут). Они (MS) еще имеют привычку раз в несколько месяцев что-то поменять (читай — сломать) и O>снова приходится разбираться, как попасть в нужное тебе окно...
Это точно, процедуру подписи МС реализовал через пень-колоду, да и она отваливается периодически по непонятным причинам.
Здравствуйте, Черный Властелин, Вы писали:
ЧВ>Да это так, только многие здесь не имеет никакой компании, а получить EV без компании проблематично.
Сейчас вроде бы обычному "физику" и стандартный сертификат еще попробуй найди...
ЧВ>Ну и SHA-1 версия она тоже EV, единственное отличие в алгоритме хеширования. У мну две EV подписи SHA1 и SHA256 от DigiCert.
Насколько я знаю (поправьте, если ошибаюсь), EV бывают только SHA2, с ключами не менее определенной длины и строго на USB-токенах.
ЧВ>Это справедливо и для attestation. Никаких диалогов "Доверяете ли вы XXX?" не появляется, неважно attestation или HLK.
1) "такое" у меня уже есть...
у меня есть DirectShow вариант, но
новые приложения которые юзают уже новое MediaFoundation (замена Directshow) не могут использовать DirectShow виртуальные камеры.
Но в новом-продвинутом MF виртуальные камеры оказывается можно делать только через kernel-драйверы....очередное "спасибо" Microsoft'у...
2)позвонил в GlobalSign- действительно делают на ИП, начал процесс... Вроде ничего сложного пока нет...
Здравствуйте, okman, Вы писали: ЧВ>>Ну и SHA-1 версия она тоже EV, единственное отличие в алгоритме хеширования. У мну две EV подписи SHA1 и SHA256 от DigiCert. O>Насколько я знаю (поправьте, если ошибаюсь), EV бывают только SHA2, с ключами не менее определенной длины и строго на USB-токенах.
Ну хз у меня SHA1 и SHA256 оба на токене, вот скриншот SHA1 версии — она вроде как тоже EV:
Здравствуйте, Черный Властелин, Вы писали:
ЧВ>Ну хз у меня SHA1 и SHA256 оба на токене, вот скриншот SHA1 версии — она вроде как тоже EV:
Не, надо смотреть не сюда, а в поле "Certificate Policies".
Например, у нас в EV-сертификате SHA256 там такая строка: Policy Identifier=1.3.6.1.4.1.4146.1.2
А в сертификате SHA1 (который на том же токене) другая: Policy Identifier=1.3.6.1.4.1.4146.1.50
1.3.6.1.4.1.4146.1.2 — это "Extended validation certificate policy for code signing", а 1.3.6.1.4.1.4146.1.50 — "Code signing certificate policy".
В подписях тоже, кстати, OID-ы разные. По ним, как я понимаю, система отличает "богатый" сертификат от "бедного"
Кросс-подпись: 1.3.6.1.5.5.7.3.3 (Digital Signature).
Attestation-подпись: 1.3.6.1.4.1.311.10.3.5.1 (Attested WHQL).
WHQL-подпись: 1.3.6.1.4.1.311.10.3.39 (EV WHQL).
Здравствуйте, okman, Вы писали: O>Не, надо смотреть не сюда, а в поле "Certificate Policies". O>Например, у нас в EV-сертификате SHA256 там такая строка: Policy Identifier=1.3.6.1.4.1.4146.1.2 O>А в сертификате SHA1 (который на том же токене) другая: Policy Identifier=1.3.6.1.4.1.4146.1.50
Да странно, у меня в обоих SHA1 и SHA256 одинаково: