OpenSSL . Создание сертификатов.

OpenSSL — криптографический пакет с открытым исходным кодом для работы сSSL/TLS. Позволяет создавать ключи RSA, DH, DSA и сертификаты X.509, подписывать их, формировать CSR и CRT. Также имеется возможность шифрования данных и тестирования SSL/TLS соединений.

1. /etc/ssl/openssl.cnf

dir = . # Это каталог для работы с SSL
certs = $dir. # Это где будут лежать сертификаты
crl_dir = $dir # Это где будут листы "отзывов подписей"
database = $dir/index.txt # Здесь index file для индексирования запросов на подпись
new_certs_dir = $dir # Сюда будут писать новые сертификаты
certificate = $dir/cacert.pem # Корневой сертификат
serial = $dir/serial # Серийный номер запроса
crl = $dir/crl.pem # Текущий лист отзывов подписей
private_key = $dir/ca.key # Секретный ключ для основного сертификата
RANDFILE = $dir/.rand #

default_days = 3650 # Количество дней действия сертификата
default_md = md5 # метод шифрования

[ req ]
# Секция основных опций
prompt = no # Брать параметры из конфига, не интерактивный режим. Если не
# указывать prompt no, то значения для параметров будут с читаны в
# интерактивном режиме(то бишь с клавиатуры), а значения параметров
# будут являться подсказками при вводе данных

[ req_distinguished_name ]
# В данной секции вносим свои данные,
# которые будут использоваться по умолчанию
# при генерации запроса на подписание сертификата.
countryName = Country Name (2 letter code)
countryName_default = MY_LANG
countryName_min = 2
countryName_max = 2

stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Russian

localityName = Locality Name (eg, city)
localityName_default = MY_CITY

0.organizationName = Organization Name (eg, company)
0.organizationName_default = MY_COMPANY

organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = ADMIN

[ usr_cert ]
basicConstraints=CA:FALSE
nsCertType = client, email
nsComment = "OpenSSL Generated Certificate "

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
#Для создания мульти ключа нужно добавить
subjectAltName = DNS:mail.example.ru, DNS:imap.example.ru, DNS: pop.example.ru

[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
basicConstraints = CA:true
nsCertType = sslCA, emailCA

Дополнительные свойства, описанные в скрипте [v3_req] означают, что клиент может использовать сертификат для подписывания и шифрации, но его cертификат не является CA сертификатом. Для CA сертификата значение basicConstraits должно быть равно CA:TRUE (это обязательно!). Поле nsCertType определяет дополнительные назначения данного ключа. Для CA сертификатов обычно применяют следующие значения nsCertType: sslCA, emailCA. Для SSL ключей серверов используется значение nsCertType = server Полученный таким образом сертификат клиента будет содержать информацию о поставщике сертификата Клиенту необходимо еще и перевести сертификаты в формат PKCS#12.

2) Создание сертификатов.

Сначала генерируется закрытый ключ для будущего корневого сертификата:

# openssl genrsa -des3 -out ca.key 1024

des3 означает, что ключ будет зашифрован по алгоритму Triple-DES.

ca.key – имя файла ключа .

1024 – длина ключа в битах, не рекомендуется устанавливать ее больше данного значения, иначе могут быть проблемы с некоторыми реализациями SSL .

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

 

Затем создается собственно корневой сертификат ЦС.

Корневой сертификат будет самоподписанным, потому что он находится выше всех в создаваемой иерархии:

# openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
-days 3650 – это количество дней от текущего дня, в течение этого срока сертификат будет считаться действующим.
ca.key – имя файла с закрытым ключом,созданным на предыдущем шаге
ca.crt – имя файла, в который будет записан созданный корневой сертификат ЦС.
В процессе создания сертификата вам будут задавать вопросы об информации, которая будет указана в созданном сертификате, обязательным является только ответ на Common Name, где имеет смысл указать название вашего ЦС.
Теперь есть пара из корневого сертификата ЦС и его закрытого ключа, и можно создать сертификаты для сервера и клиентов.
Начнем с сервера. Генерируем закрытый ключ: 
# openssl genrsa -out server.key 1024
Ключ будет записан в файл server.key.
Генерируем запрос на сертификат:
# openssl req -new -key server.key -out server.csr
На этом этапе вам снова предложат заполнить информационные поля сертификата. В поле Common Name следует указать полное определенное доменное имя (FQDN) вашего сервера (что-то вроде mail.sercer.home.ru или ip), чтобы почтовый клиент не выдавал предупреждение о неверности имени.
И наконец, выдаем сертификат и подписываем его закрытым ключом корневого ЦС: 
# openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-extfile /etc/ssl/openssl.cnf -extensions v3_req -out server.crt
Вас попросят ввести пароль к закрытому ключу ЦС. Сертификат будет выдан на 3650 дней.
Ключ -CAcreateserial нужен для того, чтобы OpenSSL вел учет выдаваемым сертификатам в своей внутренней базе. Файл запроса на сертификат server.csr можно удалить, скорее всего, он больше вам не понадобится.
В основе статьи использованна статья с сайта  unix.npoa.ru

 

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

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