Немного о цифровых сертификатах X509

08/12/2019


С цифровыми сертификатами сейчас сталкивается любой житель страны, даже глубоко не разбирающий в IT. Банальный пример, чтобы получить ряд сервисов в “Центре Гос Услуг” необходима ЭЦП. Или другой простой повседневный образец использования цифровых сертификатов – доступ к веб серверу по протоколу HTTPS. Мы, используя эти технологии шифрования и безопасности, даже не задумываемся о той подводной части IT айсберга под ними. Тут не буду углубляться в дебри теории. Об этом написано много талмудов и трудов. Поговорим о практике и конкретно об утилите OpenSSL и ее использовании для работы с сертификатами, ключами ассиметричного шифрования и прочими нюансами.

Как правило, для ассиметричного шифрования и подлинности используются ключи RSA. Есть конечно же и варианты с Elliptic-curve и чем-то еще более экзотичным, но в повседневной практике такого использования практически не встречается. Сам по себе цифровой сертификат X509 представляют собой открытый ассиметричный ключ, подписанный центром сертификации.Также в этом сертификате содержатся специфичные атрибуты, которые позволяют включать дополнительную информацию о хозяевах сертификатов. В операционной системе Linux/Unix/MacOS практически все возможные операции c ключами и сертификатами можно проводить с вышеуказанной утилитой OpenSSL. Диапазон ее возможностей огромен. С помощью только этой одной утилиты возможно организовать отдельный центр сертификации. Однако, мы тут рассмотрим базовые вещи, которые необходимы ITшникам в процессе работы.

Формат отображения

В процессе работы с ключами и сертификатами Вы встретитесь с 2 основными форматами. Это DER и PEM. Если DER формат представляет собой бинарное отображение цифрового сертификата, то в PEM отображении DER файл кодируется с помощью base64 и представляется уже в HEX формате. Пример сертификата в PEM отображении приведен ниже.

-----BEGIN CERTIFICATE-----
MIID/TCCAuWgAwIBAgIJAL3AbtRECf5qMA0GCSqGSIb3DQEBBQUAMFwxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQxFTATBgNVBAMTDHd3dy50ZXN0LmNvbTAeFw0xOTEyMDcy
MDIxNDRaFw0yMDEyMDYyMDIxNDRaMFwxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpT
b21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxFTAT
BgNVBAMTDHd3dy50ZXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
ggEBAMY6Z6TFTVfyegDwOHgFWK5im3FCztyfnVI/Q+TH/mEleW4yTvOYxuIYvKr7
rcbwXZnsm70cJqUFcxxVBTZnESbNrPtglZqQOg344KSsM1X/EvjpV0x4dd7LOGc2
HWXrSeQFf0U4DnJuYCn4qJGwRfH02/4RYWk3VPKgjPhdLKSOvHxre04QiQ52q+IY
KZjXV2ABVaFHCLVn/6WWfs7UjLWhr6GQVnphX2ZyHXQ09ZM9NV7D7DpT0k6pJ6du
4M8RNLxt4lH9gG3F8a/vfdSTvDqiIHDN2wChlKLnJMB0W1icqYhUlu2AaImdRa6h
MomirZMZ98Wl2U5+E/WYXFAWf68CAwEAAaOBwTCBvjAdBgNVHQ4EFgQUh+fN0NpR
bSxkJaMr1xS8LD/irQcwgY4GA1UdIwSBhjCBg4AUh+fN0NpRbSxkJaMr1xS8LD/i
rQehYKReMFwxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYD
VQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxFTATBgNVBAMTDHd3dy50ZXN0
LmNvbYIJAL3AbtRECf5qMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
AGXPVn9YWDUYcZ6XEK9RczOkEzfUsF99ZS31P00eCANW5x/q/sXyl02LyNCwXm4l
IGPMMKj4vJQMfbl2V9QvOOK4L1n4Rt5+IekxnhqGFrUO9Q7DW02oB39mnl1R0O2A
6UGEtwUrL6Oary6EVbYNNthfVgBS7gyO93iX4Zs+I5K2KKokEYMqG/aYg1LHNLlC
D3iSgt87H5nyP+uPNtcOxtUFrBxMgc2Nf2n2/19LBSW1h0B+q+tn4Q0R5wZQxjmh
xrFmEDawG47VefTztJ/TL2PpjKCa4aEhDzePXsDTYrUHRzx2p7aeBQI2qxh60Hln
qsIADruBZwCSv3hvcMcGOTk=
-----END CERTIFICATE-----

Также надо отметить, что в подобном отображении сертификаты, ключи или запросы на подпись могут храниться не только в файле с расширением .pem, но также и в .crt или .cer. При этом, однако, например IOS устройства будут принимать .crt файлы, а .pem файлы нет.

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

Практическое использование OpenSSL

Теперь давайте посмотрим, как используя OpenSSL, работать с сертификатами и соответствующей инфраструктурой для этого.

Первое, наверняка, у Вас будет этап генерации приватного RSA ключа. Это может выполняться при создании сертификата внутри центра сертификации. Мы покажем пример как это сделать вручную с помощью команды OpenSSL.

# openssl genrsa -out testkey.pem 2048
Generating RSA private key, 2048 bit long modulus
................................+++
....................+++
e is 65537 (0x10001)

В результате выполнения вышеуказанной команды мы получим файл testkey.pem, в котором будет RSA закрытый ключ с длиной 2048 бит.

Второе, как правило в инфраструктуре X509 для получения сертификата необходимо отправить запрос от соответствующего закрытого RSA ключа в строну центра сертификации. Для этого создается запрос в виде файла с расширением .csr. Это выполняется с помощью следующей команды OpenSSL.

# openssl req -new -sha256 -key ./testkey.pem -out ./req1.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.test.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []: 

Третья, часто встречающаяся задача – перевод уже имеющегося сертификата из одного формата в другой. Где-то бывает нужен PEM формат, где-то DER, а где-то сертификат должен быть передан в виде PKCS12. Пример команды OpenSSL, которая поможет легко преобразовать PEM сертификат в DER вид.

# openssl x509 -inform PEM -outform DER -text -in ./cert.pem -out ./cert.der

Манипулируя параметрами -inform и -outform, можно выбирать формат входного и выходного файла.

Четвертый момент, на который хотелось бы обратить внимание – способ получить человечески читаемую информацию из файла с сертификатом, ключом или запросом на подпись. Эта команда OpenSSL очень похоже с предыдущей. Только вывод информации производится на экран в читаемом формате.

# openssl x509 -in ./cert.pem -inform PEM -text -noout

Параметров у утилиты OpenSSL множество. Все запоминать не имеет смысла. Наиболее часто используемые параметры, которые указывают в OpenSSL и задают направление ее работы – x509, rsa, req, genrsa. Добавляя к ним добавочные параметры, Вы сможете делать с сертификатами все что захотите.

Заключение

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *