Пояснение
В данной статье приведено описание того, как сформировать секретный ключ, серверный и клиентский сертификат в формате PKCS#12.
Генерация самоподписанного сертификата для hpd одной командой
# Сгенерировать корневой сертификат сроком действия на 10 лет и сохранить полученный сертификат сервера в файл .сrt, ключ - в .key, а также сохраним все в общий .pem файл openssl req -newkey rsa:2048 -x509 -nodes -days 3650 -subj "/C=RU/ST=Moscow/L=Zelenograd/O=Latera Software LLC/OU=Development section/CN=Latera Software development section/emailAddress=info@latera.ru" -keyout server.key -out server.crt cat server.crt server.key > server.pem #Затем сгенерировать клиентский сертификат и подписать его созданным ранее корневым сертификатом #Этот сертификат указывается в прокси nginx для шифрования канала openssl req -new -key server.key -out client.csr -config /usr/lib/ssl/openssl.cnf -subj "/C=RU/ST=Moscow/L=Zelenograd/O=Latera Software LLC/OU=Development section/CN=Latera Software development section/emailAddress=info@latera.ru" openssl x509 -req -days 3650 -in client.csr -signkey server.key -CA server.crt -CAkey server.key -CAcreateserial -out ssl.crt && cat ssl.crt server.key > ssl.pem #Для cyberplat наряду с ssl-сертификатами используется подписывание и проверка сообщений сертификатом, сгенерированным по csr-запросу от Cyberplat #cyberplat.key - секретный ключ клиента, на основании которого была сформирована подпись сертификата. Здесь для простоты совпадает с server.key, но ключ должен быть сконвертирован в старый формат ключа (первая команда) #нужно прописать путь к нему в параметр cyberplat-плагина private_key, а сгенерированный на нем сертификат cyberplat.crt отправить в Cyberplat #в параметре плагина public_key указывается публичный ключ, который должен предоставить Cyberplat для проверки подписи приходящих запросов openssl rsa -in server.key -out cyberplat.key openssl x509 -req -days 365 -in Cyberplat.csr -signkey server.key -CA server.crt -CAkey server.key -CAcreateserial -out cyberplat.crt -sha256
Ниже приведены конкретные этапы создания ключа, которые которые в командах выше происходят в полностью автоматическом режиме.
Генерация секретного ключа RSA (RSA private key)
Дле генерации используется команда:
openssl genrsa -out <Key Filename> <Key Size>
где:
- <Key Filename> — название секретного ключа;
- <Key Size> — длина ключа. Доступные значения: 1024, 2048, 4096.
Пример:
openssl genrsa -out private_key.key 4096
Генерация запроса на получение сертификата (Certificate Signing Request)
Чтобы получить SSL-сертификат необходимо сгенерировать запрос на получение сертификата (Certificate Signing Request) на сервере. CSR представляет собой зашифрованный текст, содержащий информацию о компании и доменном имени.
В большинстве случаев CSR содержит следующие поля: страна (Country), регион (State/Province), город (Locality/City), организация (Organization), отдел (Organizational Unit) и доменное имя (Common Name). Обратите внимание:
- Поле "страна" должно содержать код из двух символов.
- Поля "регион" и "город" должны содержать полные названия.
- Поле "организация" — полное юридическое название компании или ФИО предпринимателя, если сертификат оформляется на него.
- Поле "отдел" — отдел организации, который занимается покупкой сертификата, например "IT".
- "Доменное имя" — полное доменное имя, на которое приобретается сертификат.
Команда создания запроса выглядит следующим образом:
openssl req -new -key <Key Filename> -out <Request Filename> -config /usr/lib/ssl/openssl.cnf
где:
- <Key Filename> — название секретного ключа RSA;
- <Request Filename> — название файла запроса на получение сертификата.
После ввода команды, запустится интерактивный режим с вопросами о компании, которой выдается сертификат. Отвечая на вопросы, нужно внести информацию о компании.
Пример:
user@server:~$ openssl req -new -key private_key.key -out request.csr -config /usr/lib/ssl/openssl.cnf 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]: RU State or Province Name (full name) [Some-State]: Moscow Locality Name (eg, city) []: Zelenograd Organization Name (eg, company) [Internet Widgits Pty Ltd]: Latera Software LLC Organizational Unit Name (eg, section) []: Development section Common Name (e.g. server FQDN or YOUR name) []: Latera Software development section Email Address []: info@latera.ru
Создание самозаверенного сертификата (Self-signed public certificate)
Команда:
user@server:~$ openssl x509 -req -days <Amount days> -in <Request Filename> -signkey <Key Filename> -out <Certificate Filename>
где:
- <Amount days> — количество дней, но которое создается сертификат;
- <Request Filename> — файл запроса на получение сертификата (Certificate Signing Request);
- <Key Filename> — файл, секретный ключ RSA;
- <Certificate Filename> — название самозаверенного сертификата (Self-signed public certificate).
Пример:
user@server:~$ openssl x509 -req -days 3650 -in request.csr -signkey private_key.key -out pub_cert.crt
Создание клиентского сертификата в формате PKCS#12
Команда:
user@server:~$ openssl pkcs12 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -in <Public Certificate Filename> -inkey <Private Key Filename> -out <PKCS#12 Filename> -name "<Display Name>"
где:
- <Public Certificate Filename> — файл самозаверенного сертификата (Self-signed public certificate) в PEM-формате;
- <Private Key Filename> — файл, секретный ключ RSA;
- <PKCS#12 Filename> — название сертификата PKCS#12 (клиентский сертификат);
- <Display Name> — имя, которое иногда будет отображаться в пользовательском интерфейсе.
Пример:
user@server:~$ openssl pkcs12 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -in pub_cert.crt -inkey private_key.key -out my_pkcs12.pfx -name "TEST"
Преобразовать клиентский сертификат в PEM-файл можно с помощью следующей команды:
user@server:~$ openssl pkcs12 -in <PKCS#12 Filename> -out <PEM File> -nodes
где:
- <PKCS#12 Filename> — название сертификата PKCS#12 (клиентский сертификат);
- <PEM File> — PEM-файл
Пример:
user@server:~$ openssl pkcs12 -in my_pkcs12.pfx -out my_pem.pem
Настройка агента HPD для работы с сервером клиентской верификации
На основании секретного ключа RSA и самозаверенного сертификата (Self-signed public certificate) создается PEM-файл, который пропасывается в hpd.conf в секцию настройки HTTPS-сервера с клиентской верификацией.
Команда:
user@server:~$ cat <Public Certificate Filename> <Key Filename> > <PEM File>
где:
- <Public Certificate Filename> — файл самозаверенного сертификата (Self-signed public certificate) в PEM-формате;
- <Private Key Filename> — файл секретного ключа RSA;
- <PEM File> — PEM-файл
Пример:
user@server:~$ cat pub_cert.crt private_key.key > cv-ssl.pem
PEM-файл нужно переместить в директорию /etc/hpd/cert (/etc/hydra/hpd/cert), и указать путь к нему в конфигурацинном файле hpd.conf, в секции настройки HTTPS-сервера с клиентской верификацией.
Пример:
... cv-ssl server status = on cv-ssl server ip = 0.0.0.0 cv-ssl server port = 9444 # Путь до PEM-файла сертификата HTTPS-сервера с клиентской верификацией cv-ssl server pem path = /etc/hpd/cert/cv-ssl.pem cv-ssl server plugins list = osmp ...
3 Comments
INACTIVE Тимофей Мартынов martynov@latera.ru
То же самое, только быстрее:
Денис Шилин
Действительно работает, только в последней команде вместо
-ion
должно быть-in
Сергей Мацак (INACTIVE)
Для cyberplat: