molpit
Login:
Password:
remember
DIA00159 Сага о цифровых сертификатах

Современный мир полон мошенников, а значит и различных средств защиты от них.
Поэтому ПО сегодня стараются подписывать сертификатами, чтобы показать, что источник приложения вполне определен, и фирма отвечает за то, что там нет вирусов, двоичный код приложения не был модифицирован кеи-либо во время загрузки файла или сайтом распространителем приложения.

Теперь я тоже умею подписывать приложения цифровыми сертификатами и есть возможность использовать цифровой сертификат СФУ. Для примера подписал нашу программу CellBook, которую кстати предлагаю развивать и дополнять дальше.

Как я к этому шел? Неототорые технические подробности.

В октябре мне пришлось приобретать сертификат для подписывания Java приложений для СФУ, так как проигрыватель тестов для школьных олимпиад сделан на базе этой технологии.

Сертификат у Thawte мы покупали через фирму МаксСофт, которые в свою очередь покупали его через Ру-центр. Удовольствие такое стоит сейчас с учетом подорожания доллара 10т.р. в год, поэтому из своего кармана покупать такой сертификат достаточно накладно.

С помощью утилиты keytool мне удалось создать хранилище и сформировать csr (Certificate Signing Request), которая была переправлена в Thawte. Затем они почти неделю подтверждали, что мы действительно СФУ. Не буду вдаваться в подробности, но в итоге я получил три сертификата. Корневой система уже знает.

Промежуточный импортируем командой:

keytool -import -trustcacerts -alias intermed -file intermed.crt -keystore keystore.jks

Сертификат СФУ импортирую такой командой:

keytool -import -trustcacerts -alias sfu -file sfu.crt -keystore sfu.jks


Подписывал приложения следующей командой:

jarsigner -tsa https://timestamp.geotrust.com/tsa -keystore /usr/java/jre1.8.0_25/bin/keystore.jks -strict -storepass MYPASSWORD myapp.jar sfu

Теперь возникает разумное желание подписать наши приложения этим сертификатом! Во первых, мы все-таки в СФУ и вполне можем от имени СФУ публиковать свои приложения для люминометров и различные научные модели. Вот вторых сертификат стоит немалых денег и как-то хочется его использовать рационально.

Но вот вопрос, как-же использовать его для подписи приложений Windows. Ведь для них нужно было по-другому заказывать эти сертификаты... Используется так называемый персональный ключ PVK.

Сегодня я нашел как экспортировать pvk из хранилища ключей Java!

keytool -importkeystore -srckeystore keystore.jks -destkeystore privatekey.p12 -deststoretype PKCS12

Важно, что эта команда работает только в Java начиная с версии 8.

теперь его надо конвертировать из этого формата P12

openssl pkcs12 -in privatekey.p12 -nocerts -nodes -out mykey.pem

Для преобразования файла из формата PEM воспользуемся программкой, которую заботливо подготовил Dr Stephen N Henson: http://www.drh-consultancy.demon.co.uk/pvktool.zip

pvktool (zip, 178КБ)

Эта программа работает только в винде, запускаем из командной строки:

pvk.exe -in mykey.pem -topvk -strong -out mykey.pvk

Так мы получили заветный pvk (private key).

Теперь исходный сертификат от Thawte нам нужно преобразовать в формат spc.

cert2spc Siberian_federal_university_2015_10_29.crt SFU.spc

Теперь получаем итоговый файл для подписи приложений:

pvk2pfx.exe -pvk mykey.pvk -spc SFU.spc -pfx SFU.pfx -po NEWPASSWORD

А сама подпись осуществляется такой командой:

signtool.exe sign /f SFU.pfx /p NEWPASSWORD /t http://timestamp.comodoca.com/authenticode /v 527_cellbook-0.1.0.1-setup.exe


Ссылки, которые мне очень помогли разобраться в этих хитросплетениях:

http://www.dbase.com/Knowledgebase/faq/CodeSigningHowTo.asp

http://stackoverflow.com/questions/4217107/how-to-convert-pfx-file-to-keystore-with-private-key

http://stackoverflow.com/questions/6654543/how-to-create-pfx-with-my-chain-of-certificates

http://www.tech-pro.net/export-to-pvk-spc.html

http://www.drh-consultancy.demon.co.uk/pvk.html

Ivan Denisov 05 Mar 2015 03:43
© International Open Laboratory for Advanced Science and Technology — MOLPIT, 2009–2021