Статья Приобретение цифрового сертификата для подписи драйвера (частное лицо)

Тема в разделе "Другие языки программирования", создана пользователем Dragokas, 11 апр 2014.

  1. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.476
    Симпатии:
    4.305
    Примечание редактора: начиная с Windows 10, вступают в силу новые виды сертификатов: Extended Validation
    Детальнее можно ознакомится в этой теме: Для подписания драйверов в Windows 10 Microsoft требует EV сертификат
    ________________________________________________________________________

    Автор: Казакевич Олег.

    Приветствую всех, кто заглянул.

    В этой теме я бы хотел поделиться своим опытом приобретения цифрового сертификата.
    Подобные темы уже поднимались:

    http://rsdn.ru/forum/asm/3634499.aspx
    http://rsdn.ru/forum/shareware/4306500.aspx
    http://rsdn.ru/forum/asm/4343915.aspx
    http://rsdn.ru/forum/shareware/4269597.aspx
    http://rsdn.ru/forum/shareware/4517008.aspx
    http://rsdn.ru/forum/shareware/3477809.aspx

    Поэтому буду рад, если приведенная информация для кого-то окажется полезной.

    Итак, ...

    Что нужно

    А нужно немного — получить цифровой сертификат на частное лицо, и чтобы этим сертификатом
    можно было подписывать не только exe и dll, но и драйверы на 64-битных Vista и выше.
    Именно частное лицо. Не на контору, ни даже на ИП, а на самого обычного "Васю Пупкина".

    Предыстория

    До недавнего времени я уже был наслышан про то, что сертификаты продают далеко не каждому,
    только на компанию, нужен DUNS-номер, офис, представительство в США и т.п., а простому
    смертному, тем более из такой страны как Беларусь, вообще рассчитывать не на что.

    Разведка

    Разведку я начал со страницы, где Microsoft публикует кросс-сертификаты для подписи драйверов.
    Как известно, каждому сертификату от вендора соответствует строго определенный кросс-сертификат от Microsoft и они оба должны быть включены в подпись, чтобы драйвер мог запуститься на нужных системах (имеется в виду, понятное дело, системы от 64-битной Vista и выше).
    Вот эта страница: http://msdn.microsoft.com/en-us/library/windows/hardware/gg487315.aspx

    Далее я провел небольшое онлайн-турне по сайтам компаний, приведенных на этой странице, кое-где обращался в саппорт, задавал вопросы и т.д. В общем, у меня сформировалось ощущение, что "живы" из них только VeriSign и GlobalSign, остальные то ли уже не занимаются выпуском Authenticode-сертификатов, то ли действуют только в ограниченном географически регионе, то ли еще что-то.

    Вариант с VeriSign сразу отпадает, так как их сертификаты для индивидуалов не позволяют подписывать
    драйверы, а другие выдают лишь на контору. Остается GlobalSign. И хотя я не раз слышал про их невнятный саппорт, и про всякие проблемы, и про отношение к странам третьего мира, решил рискнуть.

    Как известно, GlobalSign продает Authenticode-сертификаты двух типов — на контору (Software Vendors & Organizations, $229 в год) и на индивидуальных разработчиков (Individual Developers, $129 в год). То, что сертификатами первого типа можно подписывать драйверы, мне было известно, но на счет второго оставались сильные сомнения, тем более, что ни в FAQ, ни на форумах я подробного разъяснения не нашел.

    Задал вопрос в техподдержку — сказали да, сертификаты для индивидуалов позволяют подписывать драйверы
    на Vista-64. Но мне этого показалось мало. Я был в курсе, что GlobalSign есть главный корневой сертификат, называется он GlobalSign Root CA (1998-2028), и для него Microsoft выпустила нужный кросс, позволяющий использовать сертификаты, выданные GlobalSign Root CA для подписи драйверов. Я задал еще один вопрос в техподдержку — можно ли при заказе сертификата для индивидуального разработчика выбрать этот сертификат в качестве корневого. Мне ответили — да, с этим нет проблем. На этом разведку можно было считать завершенной.

    Подготовка

    Для оформления заказа на GlobalSign понадобится:

    1. Пластиковая карта типа Visa или Mastercard со счетом в долларах или евро. Я сделал себе самую обычную дебетовую карту Visa Classic в самом обычном банке. Разумеется, не все пластиковые карты позволяют рассчитываться в интернете. Например, Visa Electron в общем случае для этого не предназначена.

    2. Скан паспорта (последняя страница) в электронном виде.

    3. Скан последнего счета за телефон, тоже в электронном виде. В моем случае оказалось достаточным просто сбегать в банк, положить несколько тысяч на свой мобильник и сделать скан полученного чека.

    4. Заявление на получение сертификата, скан. Шаблон качать здесь:
    https://www.globalsign.com/resources/code-signing-for-individuals-registration-form.pdf
    Обращаю внимание — имя, фамилию и прочие данные нужно указывать точь-в-точь как на странице заказа (будет описано ниже) и в паспортных данных. Например, мое имя по-английски правильно было бы писать как Oleg, однако по паспорту я Aleh — так везде и указывал. Вся информация указывается латиницей, телефон можно указать в международном формате. Поле "Certificate OrderID" (номер заказа) заполняется только после процедуры онлайн-покупки — тогда этот самый OrderID и будет присвоен. "Applicant's Signature" — это поле для подписи от руки. То есть, заполняем форму, распечатываем, берем ручку, ставим подпись и делаем скан. Все введенные поля лучше хорошенько перепроверить.

    Покупка

    Идем на www.globalsign.com. Лучше все операции выполнять из-под браузера FireFox, в других были замечены глюки разной степени странности. Этой же рекомендации советуют следовать и на GlobalSign.

    Идем в Products/Code Signing, жмем "Buy Now" напротив "Individual Developers". Сохраняем "campaign code",
    показанный на первой странице — это нужно для правильного формирования цены, без использования данного кода вам будет выставлен счет на неправильную сумму. Вот как комментирует этот момент один из работников техподдержки GlobalSign:
    "We are running a promotion in code signing for individuals to make the price $129
    Please go to http://www.globalsign.eu/code-signing/code-signing-for-individual-developers.html
    And use this discount code
    USD – CAD1TH4EL3PKMHDF
    GBP – CAPKG9H8X7A5ZBC1
    EUR – CALSFB0E1WRWTPD4".

    На странице "Account Setup" внимательно и аккуратно заполняем все нужные поля формы. В "Organization Name"
    вписываем свое полное имя, как в паспорте. Например, Ivanov Ivan. Указываем свой E-mail, а также логин и пароль для доступа к будущему аккаунту на сайте GlobalSign.

    На странице "Product Details" вписываем "campaign code" в соответствующее поле и жмем "Redeem Code" — будет выставлена правильная цена.

    На странице "Certificate Identity Details" ставим галочку в "Individuals" и задаем так называемый пикап-пароль (pickup password). Этот пароль вам понадобится позже, когда вы будете забирать сертификат.

    Дальше следует "Payment Details" — то есть, собственно, оплата. Указываем все реквизиты, точь-в-точь как на пластиковой карте, в том числе и поля "Statement" — вся нужная информация находится на самой карте, если кто не в курсе.

    Если все пройдет успешно, а иначе и быть не может, данному заказу будет присвоен определенный OrderID.
    Соответствующее электронное письмо придет на почту. Этот OrderID следует вписать в заявление на получение сертификата (см. выше) и все это, вместе со сканами паспорта и счета за телефон, отправить на электронный адрес vetting-us@globalsign.com. Если верить инструкциям, наличие данных документов существенно ускоряет процесс.

    Кроме OrderID, для вас в системе GlobalSign будет создан аккаунт с именем вида PARxxxxxx_yyyyyyyyyy, где xxxxxx — некое число, а yyyyyyyyyy — логин, который вы указывали при заказе сертификата.
    Например, PAR123456_sashka1980. С этими данными можно будет заходить в систему и управлять своими заказами.

    Ожидание

    Следует учесть, что офис GlobalSign находится в таком часовом поясе, что ответа на письмо, отправленное утром, можно ожидать не раньше вечера. За все время, которое я занимался сертификатом, со мной, помимо техподдержки, контактировало два человека — первый интересовался, почему я не завершил один из заказов (я тогда забыл про campaign code и недоумевал, почему цена на странице заказа указана $229, хотя на главной "обещали" $129), второй непосредственно обрабатывал сам заказ. Оба были предельно корректными, охотно давали разъяснения и направляли мои действия в нужное русло. Я ожидал, что мне, возможно, позвонят по телефону для проверки и был в ужасе, потому что разговорный английский у меня просто жуткий. Но не позвонили. В итоге уже через сутки мне пришло электронное письмо с приятным названием: "Certificate
    Download Ready".

    Получение сертификата

    ВНИМАНИЕ!
    Получение сертификата — разовая процедура, ее следует проводить осторожно, чтобы не "профукать" сертификат каким-нибудь нечаянным действием, после чего, вероятно, предстоят определенные разбирательства с техподдержкой. Суть в том, что public- и private-ключи генерируются однократно и только в тот момент, когда вы желаете забрать сертификат. После этого страница уничтожается, так что никто, кроме вас, не сможет получить ключи. И я настойчиво рекомендую использовать только FireFox.

    Итак, в электронном письме вам пришлют ссылку на временную страницу, где будут сгенерированы ключи и откуда вы сможете импортировать их в браузер. Там ничего сложного, просто нужно будет нажать на пару больших кнопок. Здесь понадобится пикап-пароль, созданный при заказе сертификата (см. выше). Перед тем, как забрать сертификат с этой страницы, зайдите в настройки FireFox, на вкладку "Защита", и включите мастер-пароль. Без этого шага сертификат будет экспортироваться из браузера без приватного ключа, что в контексте рассматриваемого вопроса бессмысленно. Вот и все. После процедуры импорта сертификата в браузер можно зайти в настройки FireFox, на вкладку "Дополнительно", открыть список сертификатов, найти среди них свой и выполнить его экспорт в файл. Я, к примеру, получил файл с расширением .p12.

    Свойства

    Данный сертификат от GlobalSign, как я и ожидал, обладает всеми необходимыми и привлекательными свойствами. Во-первых, его "узнают" все без исключения "голые" системы от XP до Windows 8 Release Preview; не требуется задействовать ни интернет, ни службы обновления сертификатов. Во-вторых, подпись драйвера тоже проходит на
    отлично, как и проверка утилитой signtool (signtool.exe verify /kp), надо только не забыть про кросс-сертификат. Я уже опробовал данный серт на разных 64-битных системах от Vista и выше — там с запуском
    драйвера все в полном порядке. В-третьих, в корне цепочки доверия тот самый GlobalSign Root CA, валидный до 2028 года. Именно тот, который я хотел.

    Вот и все, собственно.
    Благодарю за внимание !
     
    Последнее редактирование: 14 авг 2015
    shestale, Kиpилл и orderman нравится это.
  2. IgorTikh
    Оффлайн

    IgorTikh Новый пользователь

    Сообщения:
    1
    Симпатии:
    0
    Dragokas, спасибо за подробные разъяснения в теме!
    А как вы заказали алгоритм шифрования сертификата - sha1 или sha256?
    нам нужен sha1, а сделали нам sha256.
    Написал им (Clobalsign) об ошибке, и не знаю, где и как они это смогут исправить.
    Я нигде не видел опцию выбора вида алгоритма?
     
  3. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.476
    Симпатии:
    4.305
    IgorTikh, пожалуйста. Не за что. Хоть статья и не моя :)
    Уверены, что сертификат sha256 ?

    Попробуйте принудительно задать алгоритм опцией /fd
    Код (DOS):

    @echo off
    SetLocal EnableExtensions

    :: %1 - аргумент батника - файл для подписания.


    set "CompanyName=Alex Dragokas"
    set "CertPath=keys"
    set "CertPASS=mypass"
    set "timestamp=http://timestamp.globalsign.com/scripts/timstamp.dll"

    set SDKBin=%ProgramFiles%\Microsoft SDKs\Windows\v7.0\Bin
    if not exist "%SDKBin%" (echo You need to install Windows SDK Tools & pause & start "" "http://www.microsoft.com/en-us/download/details.aspx?id=3138" & exit /B)

    "%SDKBin%\signtool.exe" sign /fd SHA1 /f "%CertPath%\mycert.pfx" /p "%CertPASS%" /t "%timestamp%" /v "%~1"
     

Поделиться этой страницей