Page tree
Skip to end of metadata
Go to start of metadata

Пояснение

В данной статье приведено описание того, как сформировать секретный ключ, серверный и клиентский сертификат в формате 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). Обратите внимание: 

  1. Поле "страна" должно содержать код из двух символов.
  2. Поля "регион" и "город" должны содержать полные названия.
  3. Поле "организация" — полное юридическое название компании или ФИО предпринимателя, если сертификат оформляется на него. 
  4. Поле "отдел" — отдел организации, который занимается покупкой сертификата, например "IT". 
  5. "Доменное имя" — полное доменное имя, на которое приобретается сертификат.

Команда создания запроса выглядит следующим образом:

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

...
  • No labels

3 Comments

  1. То же самое, только быстрее:

    # Создать серверный сертификат на 10 лет, используя новый ключ
    openssl req -newkey rsa:1024 -x509 -nodes -days 3650 -keyout server.pem -out server.pem
    # Создать клиентский сертификат
    openssl pkcs12 -export -out client.pfx -in server.pem -name "Test Certificate"
    # Преобразовать клиентский сертификат в PEM-формат (если надо)
    openssl pkcs12 -ion client.pfx -out client.pem -nodes
    1. Действительно работает, только в последней команде вместо -ion должно быть -in

  2. Для cyberplat:

    openssl genrsa -out cyberplat_priv.pem 2048
    openssl rsa -in cyberplat_priv.pem -pubout -out cyberplat_public.pem
    openssl req -new -x509 -key cyberplat_priv.pem -out server.crt
    openssl ca -in ./UmnyeSeti.csr -out client.crt