До сих пор однозначно не решённый вопрос. Эти выходные посвящу его решению.
Задача. Подписать неподписанный драйвер, чтобы он работал в Win 7 x64. Не использовать патчи системных файлов винды, кнопку F8 при загрузке, или тестовый (TESTSIGNING ON) режим.
Дополнение: работа драйвера требуется только на ОДНОЙ КОНКРЕТНОЙ машине.
Варианты решения: подписание цепочкой сертификатов (в этом надо разобраться).
Подписание драйверов в W7 x64 (решено)
-
Андрей Карпишин
- Архитектор
- Сообщения: 9193
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Вопрос по подписанию драйверов в W7 x64
Хабр писал(а):"Расскажите, будьте так добры, как запустить самоподписанный драйвер, не активируя тестовый режим (т.е. не используя команду bcdedit.exe /set testsigning on, которая помимо включения режима доверия к самоподписанным драйверам заодно отключает некоторые функции по управлению цифровым контентом).
Для информации: сделать доверенным свой сертификат невозможно, т.к. его для этого требуется подписать кросс-сертификатом от MS или чьим-нибудь ещё, чтобы выстроилась цепочка сертификатов. Даже если принудительно добавите сертификат в качестве корневого, при попытке использовать его для драйверов система пошлёт Вас куда подальше (несмотря на то, что в свойствах драйвера будет говориться, что сертификат совершенно валиден)."
"То что сделать свой сертификат доверенным невозможно — это вы уже очевидную ерунду говорите. Это же ваш компьютер в конце концовЛюбой админ поднимавший свой CA это знает и для этого не надо быть низкоуровневым разработчиком.
Вам нужно добавить корневой сертификат CA в TRCA, и скорее всего еще нужен сертификат которым производилась подпись (или достаточно опять сертификата CA) в Trusted Publishers.
Всё это разумеется надо делать в хранилище сертификатов компьютера, а не пользователя.
Я, честно говоря, действительно не загружал таким образом самоподписанные драйверы самостоятельно (я не разработчик, обычно использую PKI для других целей), но мнению того MVP который мне об этом сообщал, склонен доверять, тем более что его компания использует (или использовала) такой подход для своего ПО."
"Да, я лично это попробовал, причём первым же делом, как только столкнулся с проблемой необходимости наличия ЦП у драйверов. Если просто подписать драйвер сгенерированной тестовой подписью, то винда говорит, что подпись невалидна, и драйвер не грузит. Если добавить свой сертификат в корневое хранилище, то винда утверждает, что подпись полноценная, доверенная, и вообще вся из себя самая что ни на есть настоящая, но несмотря на это запускать драйвер по-прежнему упорно отказывается."
"Я не увидел у вас в ответе подтверждений что вы делали именно как я сказал, так что извините, но некоторые вопросы задам снова:
Как генерировали сертификаты?
Какие опции включены в Key Usage у подписывающего сертификата?
Точно ли все операции производились с хранилищем компьютера, а не пользователя?
В TRCA надо добавлять сертификат с публичным ключом CA, а не тот которым подписываем драйвер. Так и делали?
В TP надо добавлять либо сертификат с публичным ключом CA, либо непосредственно тот которым подписываем. Не уверен, так что для эксперимента лучше добавить оба."
-
Андрей Карпишин
- Архитектор
- Сообщения: 9193
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Вопрос по подписанию драйверов в W7 x64
reverse4you.org писал(а):Цепочка сертификатов должна уходить рутом в доверенный сертификат МС (для этого и нужен кросс-сертификат при подписи релизной версии). Список паблик ключей доверенных корневых сертификатов жестко прибит гвоздями внутри ci.dll. Так что наиболее реалистичный вариант - купить самый дешевый сертификат
-
Андрей Карпишин
- Архитектор
- Сообщения: 9193
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Вопрос по подписанию драйверов в W7 x64
что еще за доверенный сертификат МС? Чем он отличается от любого другого?Цепочка сертификатов должна уходить рутом в доверенный сертификат МС
Да, в этой библиотеке содержится список доверенных корневых сертификатов различных издателей, именно из него Windows получает информацию о том кому доверять сразу после установки. И? Это не значит что в список доверенных сертификатов нельзя добавить свой корневой сертификат после установки, с помощью обычной оснастки.Список паблик ключей доверенных корневых сертификатов жестко прибит гвоздями внутри ci.dll
Короче говоря, рассказываю секретную тонкость, подозреваю может быть кому-то не известна:
Проверяйте сами, не доверяйте профессионалам (мне тоже). У вас не получается, а у остальных получается? Разбирайтесь, ищите в чем дело, спрашивайте (приводя условия и результаты эксперимента).
Я вот увидел у вас ссылку с подтверждением что это работает, и довод кого-то, что нет, и насколько я понимаю вы сами даже не пробовали. Я знаю что самоподписанный сертификат прекрасно добавляется в доверенные (я сам это неоднократно проверял). Я знаю что в сертификатах нет флага "ЭтоСертификатМС" (я сам смотрел). Я не вижу никаких причин почему подписывать драйверы своим сертификатом невозможно. Даже наоборот, я вижу кучу подтверждений что это возможно.
Курсивом - товарищ с хабра.
-
Андрей Карпишин
- Архитектор
- Сообщения: 9193
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Подписание драйверов в W7 x64 (решено)
Был получен ответ ещё от одного эксперта
Олег Казакевич:
Олег Казакевич:
Для того, чтобы драйвер был загружен на Vista-64 и выше, а также на
Windows 8 и выше в режиме Secure Boot, вне тестовых режимов и т.п.,
он должен быть подписан, причем в подписи обязательно должен быть
соответствующий кросс-сертификат от Microsoft. Таких кросс-сертификатов
существует всего порядка 20, каждый для конкретной конторы, которая
продает сертификаты - Symantec, Thawte, GlobalSign, DigiCert и т.п.
Если у вас самопальный сертификат, созданный каким-нибудь makecert.exe,
то к нему просто не существует кросса. И система такой драйвер загружать не будет.
Существует лишь 4 легальных способа загрузки драйвера на обозначенных системах:
1) Подписать драйвер настоящим сертификатом, купленным у одной из организаций типа Symantec
(с кросс-сертификатом)
2) Загружать систему в тестовом режиме, используя самопальный сертификат.
3) Нажимать при загрузке F8 и отключать проверку цифровых подписей.
4) Перевести систему в режим отладки и загружать ее с подключенным отладчиком ядра (например, WinDBG).
Других путей нет (ну если только не считать всякие там патчи ядра, уязвимости и т.п.).
-
Андрей Карпишин
- Архитектор
- Сообщения: 9193
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Подписание драйверов в W7 x64 (решено)
Если использовать при подписи timestamp, то драйвер подписанный сертификатом будет действовать и после окончания срока действия сертификата?
- Да.
- Да.
-
Андрей Карпишин
- Архитектор
- Сообщения: 9193
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Вопрос по подписанию драйверов в W7 x64
Товарищ с Хабра перепутал разные типы сертификатов: для SSL (валидности сайта) и code signing. Требования ко второму выше. (Слышал звон, да не знает, где он.) А компания, на которую он ссылается, видимо работает как раз с сертификатами первого типа.xaegr писал(а):"То что сделать свой сертификат доверенным невозможно — это вы уже очевидную ерунду говорите. Это же ваш компьютер в конце концовЛюбой админ поднимавший свой CA это знает и для этого не надо быть низкоуровневым разработчиком.
Вам нужно добавить корневой сертификат CA в TRCA, и скорее всего еще нужен сертификат которым производилась подпись (или достаточно опять сертификата CA) в Trusted Publishers.
Всё это разумеется надо делать в хранилище сертификатов компьютера, а не пользователя.
Я, честно говоря, действительно не загружал таким образом самоподписанные драйверы самостоятельно (я не разработчик, обычно использую PKI для других целей), но мнению того MVP который мне об этом сообщал, склонен доверять, тем более что его компания использует (или использовала) такой подход для своего ПО."
-
Андрей Карпишин
- Архитектор
- Сообщения: 9193
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Подписание драйверов в W7 x64 (решено)
Приобретение цифрового сертификата для подписи драйвера (частное лицо)
Автор: Казакевич Олег.
Автор: Казакевич Олег.