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

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
7,814
Реакции
6,593
Примечание редактора: начиная с 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 года. Именно тот, который я хотел.

Вот и все, собственно.
Благодарю за внимание !
 
Последнее редактирование:
Dragokas, спасибо за подробные разъяснения в теме!
А как вы заказали алгоритм шифрования сертификата - sha1 или sha256?
нам нужен sha1, а сделали нам sha256.
Написал им (Clobalsign) об ошибке, и не знаю, где и как они это смогут исправить.
Я нигде не видел опцию выбора вида алгоритма?
 
IgorTikh, пожалуйста. Не за что. Хоть статья и не моя :)
Уверены, что сертификат sha256 ?

Попробуйте принудительно задать алгоритм опцией /fd
CMD/BATCH:
@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"
 
Назад
Сверху Снизу