к.п.н. Тунгатарова А.Т., преподаватель Тулегенова С.Н., студент Шардарбеков А.

 

Таразский  государственный университет им. М.Х.Дулати

 

Создание цифровых сертификатов с применением пакета OpenSSL

 

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

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

Инфраструктура открытого ключа (PKI) является системой цифровых сертификатов, центров сертификации (ЦС), которая производит проверку и подтверждение подлинности каждой из сторон, участвующих в электронной операции, с помощью криптографии открытых ключей.

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

Центр Сертификации (Certification Authority, CA) является пакетом программного обеспечения, принимающим и обрабатывающим запросы на выдачу сертификатов, издающим сертификаты и управляющим выданными сертификатами.

Корневой сертификат - сертификат принадлежащий Центру Сертификации, с помощью которого проверяется достоверность других выданных центром сертификатов.

Список отозванных сертификатов - список скомпрометированных или недействительных по какой либо другой причине сертификатов.

Отличительное имя (Distinguished Name, DN) - данные о владельце сертификата. Включают CN (Common Name), OU (Organization Unit), O (Organization), L (Locality), ST (State or province), C (Country name).

Электронная цифровая подпись (ЭЦП)- реквизит электронного документа предназначенный для удостоверения источника данных и защиты данного электронного документа от подделки.

Рассмотрим создание запросов на сертификацию X.509 и управление ими. Для создания запросов на сертификацию X.509 используется следующая команда:

$ openssl req <параметры>

В качестве параметров используются следующие ключи (дефисы перед ключами обязательны):

• -inform <DER|PEM> — формат входного файла;

• -outform <DER|PEM> — формат выходного файла;

  in <имя_файла> — указание входного файла;

• -passin <источник_пароля> — указание на источник пароля для ключа во входном файле;

• -out <имя_файла> — указание выходного файла;

• -passout <источник_пароля> — указание на источник пароля для запроса в выходном файле;

• -text — вывести запрос на сертификацию в текстовом виде;

• -pubkey — вывести открытый ключ из запроса;

• -noout — не выводить значение запроса в кодированном виде;

• -modulus — вывести длину открытого ключа из запроса;

• -verify — проверить подпись на запросе;

• -new — генерировать новый запрос на сертификацию (будет запрошена информация о пользователе; если не указан параметр -key, то будет сгенерирован ключ RSA);

• -rand <имя_файла> — указание на файл-источник энтропии для ГПСЧ;

• -newkey <параметр> — создать новый ключ и запрос на его сертификацию. Значение параметра может быть одним из следующих:

- rsa:<длина> — создать ключ RSA указанной длины;

- алгоритм>:<файл_параметров> — создать ключ указанного алгоритма с параметрами из указанного файла

• -pkeyopt <ключ:значение> — параметры, используемые при генерации ключа;

• -key <имя_файла> — указывает на файл с ключом, для которого необходимо подготовить запрос;

• -keyform <PEM|DER> — формат ключа в указанном файле;

• -keyout <имя_файла> — сохранить сгенерированный ключ в указанном файле;

• -nodes — не шифровать создаваемый ключ;

• -<хэш_функция> — хэш-функция, используемая для подписывания запроса (вместе с DSA всегда используется SHA1);

• -x509 — сгенерировать самоподписанный сертификат вместо запроса на сертификацию (используется для создания корневых сертификатов);

• -days <значение> — срок действия сертификата в днях;

• -set_serial <значение> — серийный номер сертификата;

• -verbose — повышенный уровень детализации выполняемых операций.

Управление цифровыми сертификатами X.509

Для управления сертификатами X.509 используется следующая команда: $ openssl x509 <параметры>

В качестве параметров используются следующие ключи (дефисы перед ключами обязательны):

• -inform <DER|PEM> — формат сертификата во входном файле;

• -outform <DER|PEM> — формат сертификата в выходном файле;

• -in <имя_файла> — указание входного файла;

• -out <имя_файла> — указание выходного файла;

• -<хэш-функция> — указание хэш-функции, используемой для создания сертификата (по умолчанию SHA1, для алгоритма DES всегда используется SHA1);

• -text — вывести информацию о сертификате в текстовой форме;

• -noout — не выводить кодированный вариант запроса на подпись;

• -modulus — вывести длину открытого ключа из сертификата;

• -serial — вывести серийный номер сертификата;

• -subject_hash — вывести хэш от имени субъекта сертификации;

• -issuer_hash — вывести хэш от имени издателя сертификата;

• -subject — вывести имя субъекта сертификации;

• -issuer — вывести имя издателя сертификата;

• -email — вывести все адреса почтовых ящиков, если они указаны в сертификате;

• -ocsp_uri — вывести адрес сервера OCSP, если он указан в сертификате;

• -startdate — вывести дату начала действия сертификата;

• -enddate — вывести дату окончания действия сертификата;

• -dates — вывести обе даты;

• -fingerprint — вывести отпечаток сертификата в формате DER;

• -С — вывести сертификат в формате исходного кода на С;

• -signkey <имя_файла> — сделать входной файл самоподписанным сертификатом с использованием указанного ключа:

- если входной файл — сертификат, то имя издателя устанавливается равным имени субъекта, копируется открытый ключ, дата начала действия устанавливается на текущую дату, а дата окончания действия — на дату через количество дней, указанное в параметре -days;

- если входной файл — запрос на сертификацию, то создаѐтся сертификат с использованием предоставленного ключа, имя субъекта берѐтся из запроса на сертификацию;

• -keyform <PEM|DER> — формат закрытого ключа в файле, указанном параметром -signkey;

• -days — срок действия сертификата в днях (по умолчанию 30);

• -req — указание на то, что в качестве входного файла передаѐтся запрос на сертификацию;

• -set_serial <номер> — установить серийный номер сертификата (используется с параметрами - signkey или -ca);

• -CA <имя_файла> — указывает на файл с сертификатом центра сертификации, который будет

использован для подписи входного файла (используется для подписи запросов на сертификацию с параметром -req);

• -CAkey <имя_файла> — указывает на файл с закрытым ключом центра сертификации;

• -CAserial <имя_файла> — указывает на файл с серийным номером.

Создание собственного СА сертификата

1. Настройка рабочего места.

1) Для того чтобы созданные ключи, запросы на сертификат, сертификаты и прочее не были перемешаны, рекомендуется создать для себя рабочий каталог mySSL. В данном случае C:\mySSL\ является рабочим каталогом, содержащим следующие подкаталоги и файлы:

- key - каталог с private-ключами;

- csr - каталог запросов на сертификат (Certificate Signing Request) ;

- cer - каталог сертификатов, для публичного пользования (Certificate) ;

- crl - каталог списков отозванных сертификатов (Certificate Revocation List) ;

- p12 - каталог сертификатов p12, с private-ключом (Personal Information Exchange File);

- database.txt - база данных выпущенных сертификатов;

- serial.txt - файл с текущим серийным номером сертификата.

2) Настройка OpenSSL. Для этого, в рабочем каталоге (C:\mySSL\) надо разместить конфигурационный файл openssl.cfg, после чего можно приступать к созданию сертификатов.

3) Для выпуска собственного CA сертификата получим private-ключ:

Openssl> genrsa -des3 -out c:\mySSL\key\ca.key 1024

Здесь, 1024 - длина ключа в битах, не рекомендуется устанавливать ее больше данного значения, иначе могут быть проблемы с некоторыми реализациями SSL; ca.key - имя файла ключа.

 

 

4) Для создания CA сертификат выполним команду:

openssl> req -config c:\mySSL\openssl.cfg -new -x509 -days 365 -key c:\mySSL\key\ca.key –out c:\mySSL\ cer\ca.cer –subj "/C=KZ/ST=Kazahstan/L=Taraz/O=MyCompany/OU=CA/CN=localhost"

 

 

Содержимое параметра -subj состоит из сегментов вида /$KEY=$VALUE, где $KEY может ринимать такие значения:

- C - country, двухбуквенный код страны, например, RU или US

- ST - state, обычно это регион, область, район и т.д.

- L - locality, обычно это город

- O - organization, название организации

- OU - organization unit, отдел в организации

- CN - common name, обычно это адрес веб-сайта

Здесь:

- days 30 — это количество дней от текущего дня, в течение этого срока сертификат будет считаться действующим.

- ca.key — имя файла с закрытым ключом, созданным на предыдущем шаге

- ca.cеr — имя файла, в который будет записан созданный сертификат ЦС.

5) Открыв паку cer можно просмотрить созданный сертификат.

6) Сделаем экспорт в PKCS12, упаковав приватный ключ и сам CA сертификат:

Openssl> pkcs12 -export -in c:\mySSL\cer\ca.cer -inkey c:\mySSL\key\ca.key -out c:\mySSL\p12\ca.p12

7) Откроем и просмотрим содержимое папки р12

8) Выполним выпуск дочернего SSL сертификата, для этого сделаем запрос на SSL сертификат:

Openssl>req -config openssl.conf -new -newkey rsa:1024 -keyout key\test.key -nodes -out csr\test.csr -subj "/C=RU/ST=Russia/L=Moscow/O=MyCompany/OU=IT Departament/CN=localhost"

9) Подтвердим запрос на сертификат cjplfyysvCA сертификатом (подпишим серификат нашим CA сертификатом):

Openssl> ca -policy policy_any -config openssl.conf -in csr\test.csr -days 360 -out cer\test.cer

10) Экспорт в PKCS12 полученного SSL сертификата:

Openssl> pkcs12 -export -out p12/test.p12 -in cer/test.cer -inkey key/test.key

11) Для того чтобы добавить созданные сертификаты (PKCS12) в хранилище сертификатов надо в консоли управления оснастками (команда mmc) добавить оснастку "Сертификаты" для локальной машины, после чего, импортировать сертификаты и список отозванных сертификатов в соответствующие папки (в папку "Личные" и "Доверенные корневые центры сертификации").

5163821702_dcb7d258a5_z

 

3. Вывести запрос на сертификацию в текстовом виде:

openssl> req -in req.pem -text –noout

Отобразить информацию о закрытом ключе:

 

 

4. Проверить целостность и полноту запроса на сертификацию:

Openssl> req -in req.pem -text -noout –verify

 

Литература

1. Нестеров С. А. Информационная безопасность и защита информации: Учеб. пособие. – СПб.: Изд-во Политехн. ун-та, 2009. – 126 с.

2. Костромин В.А.Самоучитель Linux для пользователя. – СПб.: БХВ-Петербург, 2003. - 672 с.: ил.