к.п.н. Тунгатарова А.Т., преподаватель Тулегенова С.Н.,
студент Шардарбеков А.
Таразский государственный университет им. М.Х.Дулати
Создание цифровых сертификатов с
применением пакета 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) добавить оснастку
"Сертификаты" для локальной машины, после чего, импортировать
сертификаты и список отозванных сертификатов в соответствующие папки (в папку
"Личные" и "Доверенные корневые центры сертификации").

3. Вывести запрос на сертификацию в текстовом виде:
openssl> req -in
req.pem -text –noout
Отобразить информацию о
закрытом ключе:

4. Проверить целостность и полноту запроса на
сертификацию:
Openssl> req -in
req.pem -text -noout –verify
Литература
1. Нестеров С. А. Информационная безопасность и защита
информации: Учеб. пособие. – СПб.: Изд-во Политехн. ун-та, 2009. – 126 с.
2. Костромин В.А.Самоучитель Linux для пользователя. –
СПб.: БХВ-Петербург, 2003. - 672 с.: ил.