none
Подпись драйвера под Vista x64 RRS feed

  • Вопрос

  • Уважаемые специалисты.

    Мы являемся разработчиками аппаратного обеспечения. Нам необходимо, чтобы наше оборудование работало под 64-битной версией операционной системы Vista. Известно, что политика Microsoft по отношению к данной версии ОС такова, что неподписанный драйвер (и вообще любой код, для работы в Kernel mode) работать не будет. Политика описана здесь: http://msdn2.microsoft.com/en-us/library/aa906341.aspx . В соответствии с требованием, мы приобрели сертификат VeriSign Class 3 Code Signing (Microsoft Authenticode ID). Также в соответствии с инструкциями на странице http://www.microsoft.com/whdc/winlogo/drvsign/crosscert.mspx, мы загрузили кросс-сертификат для VeriSign Class 3 Public Primary Certification Authority. При подписи мы используем следующие опции:

    1) Добавляем все сертификаты в цепочке, включая корневой сертификат.
    2) Добавляем дополнительный сертификат – загруженный кросс-сертификат.
    3) Ставим таймштамп.

    Для генерации файла каталога используем утилиту Inf2cat с указанием в тэгах того, что этот каталог валиден для ОС Vista x64. Подписываем каталог и... Виста отказывается загружать драйвер, ссылаясь на то, что драйвер неподписан. Отключаем проверку подписи по F8 при старте ОС, всё работает нормально. Что интересно, если с теми же параметрами подписать любой исполняемый файл, то ОС правильно распознаёт подписчика и сообщает, что подпись валидна. Более того, на закладке свойств драйвера также правильно указывается подписчик драйвера (хотя все заглавные буквы пишутся почему-то в нижнем регистре), но при просмотре деталей (список файлов) все файлы помечаются, как неподписанные.

    Скажите, что мы делаем не так? Это ошибка операционной системы? Кто-нибудь пробовал ставить коммерческую подпись на драйвер? В MSDN написано, что коммерческие подписи должны работать. Почему Виста не распознаёт коммерческую подпись?

    Мы конечно понимаем, что есть программа сертификации драйверов, WHQL и всё такое, но во-первых, для сертификации под Висту заявлены совершенно драконовские требования (DTM контроллер) – сеть из двух компьютеров, на одном из которых должна стоять ОС Windows Server 2003 с 2 Gb RAM, 300 Gb HDD (зачем???), а во-вторых, нам обязательно необходима оперативная поддержка наших клиентов – нашли ошибку, тут же исправили. Время – деньги. Сертификация для них – дело десятое, главное, чтобы работало.

    2 февраля 2007 г. 13:40

Ответы

  • Вопрос решился без обращения к техподдержке.

    Проблемы, похоже, были с хранилищами сертификатов. Надо отметить, что эти хранилища – крайне запутанная штука. Разные инструменты показывают разный набор хранилищ, при этом у одного и того же хранилища в зависимости от способа доступа к нему разное имя, например при импорте сертификата визардом хранилище называется "Personal", а в опциях коммандной строки инструмента SignTool то же хранилище должно называться "My". Добавление сертификата одним инструментом и другим приводит к разным и зачастую непредсказуемым результатам вплоть до того, что нарушается нормальная работа хранилища. Нет бы обеспечить нормальную работу с сертификатами в файлах, но и тут неприятность. Опция /ac (добавить кросс-сертификат) коммандной строки инструмента SignTool не совместима с опцией /f (работа с файлом pfx). Почему?! Для работы с файлами надо в совершенстве овладеть процедурами конвертации из одного формата в другой, поскольку два соседних инструмента (и даже один и тот же, но запущенный в разных режимах!) из каких-то принципиальных соображений работают с разными форматами файлов сертификатов. Некоторые инструменты вообще не запускаются под Вистой, поэтому подписывать драйвер приходится под XP, а затем переносить для проверки в Висту. Другая загадка – при работе с хранилищами нужно указывать имя сертификата (Subject name). Но что такое имя, я не имею понятия, а разъяснений в MSDN нет. Нигде в свойствах сертификата имя не фигурирует (если не считать длиннющую структуру со множеством полей в деталях сертификата). Если это то, кому выдан сертификат (Issued to), то эта строка может иметь достаточно произвольный вид и впихнуть её в качестве аргумента сложно. Кроме того, я могу иметь два сертификата от разных CA, в таком случае Issued to будет один и тот же. Слава Богу, этот SignTool как-то ухитряется догадаться, что других подходящих сертификатов нет.

    В общем, выражаю крайнее недовольство сыростью, кривизной и плохой документированностью средств для работы с цифровыми подписями.

    6 февраля 2007 г. 17:57

Все ответы

  • Сертификация Вам в данном случае не обязательна, так что незачем сейчас о ней думать. Когда реально понадобится - тогда и беспокойтесь.

    По сути вопроса подсказать ничего, увы, не могу, компания, где я работаю, несколько остает от Вашей - только собираемся подписывать. Но ведь у Вас наверняка есть подписка MSDN, а в ней - несколько бесплатных обращений в техподдержку. Воспользуйтесь. Если все уже потратили, свяжитесь со мной, у меня есть неиспользованные, обменяю на Ваш опыт. ;)

    2 февраля 2007 г. 16:19
    Модератор
  • Вопрос решился без обращения к техподдержке.

    Проблемы, похоже, были с хранилищами сертификатов. Надо отметить, что эти хранилища – крайне запутанная штука. Разные инструменты показывают разный набор хранилищ, при этом у одного и того же хранилища в зависимости от способа доступа к нему разное имя, например при импорте сертификата визардом хранилище называется "Personal", а в опциях коммандной строки инструмента SignTool то же хранилище должно называться "My". Добавление сертификата одним инструментом и другим приводит к разным и зачастую непредсказуемым результатам вплоть до того, что нарушается нормальная работа хранилища. Нет бы обеспечить нормальную работу с сертификатами в файлах, но и тут неприятность. Опция /ac (добавить кросс-сертификат) коммандной строки инструмента SignTool не совместима с опцией /f (работа с файлом pfx). Почему?! Для работы с файлами надо в совершенстве овладеть процедурами конвертации из одного формата в другой, поскольку два соседних инструмента (и даже один и тот же, но запущенный в разных режимах!) из каких-то принципиальных соображений работают с разными форматами файлов сертификатов. Некоторые инструменты вообще не запускаются под Вистой, поэтому подписывать драйвер приходится под XP, а затем переносить для проверки в Висту. Другая загадка – при работе с хранилищами нужно указывать имя сертификата (Subject name). Но что такое имя, я не имею понятия, а разъяснений в MSDN нет. Нигде в свойствах сертификата имя не фигурирует (если не считать длиннющую структуру со множеством полей в деталях сертификата). Если это то, кому выдан сертификат (Issued to), то эта строка может иметь достаточно произвольный вид и впихнуть её в качестве аргумента сложно. Кроме того, я могу иметь два сертификата от разных CA, в таком случае Issued to будет один и тот же. Слава Богу, этот SignTool как-то ухитряется догадаться, что других подходящих сертификатов нет.

    В общем, выражаю крайнее недовольство сыростью, кривизной и плохой документированностью средств для работы с цифровыми подписями.

    6 февраля 2007 г. 17:57
  • Здравствуйте!

    Прошу прощения, что поднимаю столь давний вопрос. У нашей компании возникла потребность приобрести цифровой сертификат для подписи драйвера.

    Подскажите пожалуйста, продаёт ли VeriSign сертификаты российским компаниям, и если да, то пожалуйста поделитесь опытом, как этот сертификат оплачивается? Можем ли мы оплатить его таким образом, чтобы этот расход провести в бухгалтерии?

    Собственные изыскания на данный момент

    На сайте Microsoft на странице http://www.microsoft.com/whdc/winlogo/drvsign/crosscert.mspx дан список центров сертификации, которые выдают сертификаты, пригодные для подписывания драйверов. В этот список входят:
    Baltimore CyberTrust Root
    Equifax Secure Certificate Authority
    GTE CyberTrust Global Root
    GlobalSign Root CA
    GeoTrust Global CA
    VeriSign Class 3 Public Primary Certification Authority

    Поиск в интернете позволяет понять, что:
    Baltimore больше не существует
    Equifax имеет сайт, но при попытке послать письмо на их адрес оно сразу же возвращается с ошибкой
    GTE больше не существует
    GeoTrust торгует сертификатами от VeriSign

    То есть остаются только два центра: GlobalSign и VeriSign. После недели обращений - через веб-формы и почту, в различные филиалы - от GlobalSign пришёл ответ, что они не работают с российскими организациями. От VeriSign ответа так и нет.
    28 октября 2009 г. 13:41
  • Мне удалось получить сертификат от VeriSign для подписи модулей ядра Windows x64. Всё возможно:

    VeriSign работает с российскими компаниями на регулярной основе. Вы заказываете сертификат через форму на сайте verisign.com, затем компания VeriSign удостоверяется в том, что вы действительно те, за кого себя выдаёте. Это делается путём отправки по факсу различных документов, с помощью звонков по телефону и переписки по электронной почте. Оплатить услуги возможно с помощью обычного безналичного перевода.
    18 ноября 2009 г. 9:05
  • Уважаемые господа!

    Вот здесь http://www.microsoft.com/whdc/driver/install/drvsign/crosscert.mspx сказано о 6 корневых сертификаторах. Но это -  информация 2006 года.

    Насколько этот список актуален в настоящее время?  Например, сертификаты для разработчиков кода предлагает Comodo Group - годятся ли они для подписания драйверов или по-прежнему валидны только сертификаты от 6 перечисленных компаний?

    24 января 2011 г. 9:03