Установка и использование платформы

Пример подготовки артефактов для TLS

Поскольку канал связи по протоколу TLS между клиентом и нодой является обязательным, то в рамках настройки инфраструктуры необходимо настроить параметры связи по протоколу TLS.

Для использования канала связи по протоколу TLS для API необходимо для каждой ноды выполнить следующие шаги: .. Для работы с TLS для API необходимо получить файл keystore. Ниже представлен пример использования для этого стандартной утилиты keytool:

  1. Создать клиентские ключевую пару и запрос на сертификат с помощью генератора GeneratePkiKeypair. Для этого необходимо:

1.1 Подготовить конфигурационный файл утилиты GeneratePkiKeypair:

  • полю extended-key-usage задать значение ["clientAuth"];

  • полю key-usage задать значение ["KeyEncipherment", "DataEncipherment"];

  • в полях CN и subject-alternative-name указать соответствующие имена нод и DNS или IP адрес.

Структура конфигурационного файла генератора описана в разделе GeneratePkiKeypair.

1.2 Запустить генератор, используя следующую команду:

java -cp "generators-1.9.0-M1-38-d823c7f.jar:gostCrypto-5.0.42119-A/*" com.wavesenterprise.generator.pki.PkiKeyPairGenerator key_gen.conf

где key_gen.conf – имя конфигурационного файла утилиты GeneratePkiKeypair.

1.3 Ввести и подтвердить пароль хранилища ключей, когда генератор отобразит соответствующий запрос.

1.4 Указать этот же пароль в конфигурационном файле ноды в секции tls в поле keystore-password.

В результате работы генератор GeneratePkiKeypair выгружает артефакты для построения канала связи по протоколу TLS:

  • запрос на клиентский сертификат (CSR) вида 3MqFWYnVcBndh3Nc8gz9Ar5LEjnFQFjZX5u.req – в указанную в конфигурационном файле генератора директорию;

  • файлы клиентской ключевой пары – в контейнер в хранилище ключей. В конце лога генератора указано имя контейнера; оно потребуется для дальнейшей настройки.

  1. Отправить запрос на сертификат в УЦ и получить сертификат (клиентский сертификат).

  2. Импортировать сертификат в контейнер с соответствующей парой ключей в хранилище ключей с помощью следующей команды:

/opt/cprocsp/bin/cryptcp -instcert -cont client_container_name client_cert.crt

где

client_containter_name – имя контейнера, которое указано в конце лога генератора,

client_cert.crt – полученный из УЦ файл клиентского сертификата.

  1. Создать серверные ключевую пару и запрос на сертификат с помощью генератора GeneratePkiKeypair аналогично тому, как создавались клиентские ключевая пара и запрос на сертификат:

4.1 Подготовить конфигурационный файл утилиты GeneratePkiKeypair:

  • полю extended-key-usage задать значение ["serverAuth"];

В полях CN и subject-alternative-name уже указаны соответствующие имена нод и DNS или IP адрес.

Структура конфигурационного файла генератора описана в разделе GeneratePkiKeypair.

4.2 Запустить генератор, использую следующую команду:

java -cp "generators-1.9.0-M1-38-d823c7f.jar:gostCrypto-5.0.42119-A/*" com.wavesenterprise.generator.pki.PkiKeyPairGenerator key_gen.conf

где key_gen.conf – имя конфигурационного файла утилиты GeneratePkiKeypair.

4.3 Ввести и подтвердить тот же пароль хранилища ключей, что и для клиентской ключевой пары, когда генератор отобразит соответствующий запрос.

В результате работы генератор GeneratePkiKeypair выгружает артефакты для построения канала связи по протоколу TLS:

  • запрос на серверный сертификат (CSR) – в указанную в конфигурационном файле генератора директорию;

  • файлы серверной ключевой пары – в контейнер в хранилище ключей. В конце лога генератора указано имя контейнера; оно потребуется для дальнейшей настройки.

  1. Отправить запрос на сертификат в УЦ и получить сертификат (серверный сертификат).

  2. Импортировать серверный сертификат в контейнер с серверной парой ключей в хранилище ключей с помощью следующей команды:

/opt/cprocsp/bin/cryptcp -instcert -cont server_container_name server_cert.crt

где

server_containter_name – имя контейнера, которое указано в конце лога генератора,

server_cert_file – полученный из УЦ файл сертификата.

  1. Сформировать хранилище сертификатов TrustStore, то есть получить файл CertStore, и поместить в него корневой сертификат УЦ, клиентский и серверный сертификаты. Для этого используется утилита keytool.

При первом запуске утилита создаёт новый TrustStore и записывает в него переданный ей сертификат. При последующих запусках утилита добавляет передаваемый ей сертификат в существующий TrustStore. За один запуск утилита добавляет один сертификат.

Ниже представлен пример использования утилиты keytool.

7.1 Создание хранилища сертификатов TrustStore и запись в него корневого сертификата УЦ:

keytool -J-Dkeytool.compat=true -import -alias certnew -providername JCSP -storetype CertStore -keystore node_0_certstore -storepass certstore_password -file CA_certs/certnew
-providerpath JCSP.jar:JCP.jar:ASN1P.jar:asn1rt.jar:forms_rt.jar:
-providerclass ru.CryptoPro.JCSP.JCSP

где

alias – любое уникальное в рамках хранилища сертификатов имя; может совпадать с именем файла сертификата;

file – имя файла сертификата.

7.2 Запись в то же хранилище клиентского сертификата:

keytool -J-Dkeytool.compat=true -import
-alias 3MqFWYnVcBndh3Nc8gz9Ar5LEjnFQFjZX5u -providername JCSP
-storetype CertStore -keystore node_0_certstore
-storepass certstore_password
-file tls_certs/3MqFWYnVcBndh3Nc8gz9Ar5LEjnFQFjZX5u.crt
-providerpath JCSP.jar:JCP.jar:ASN1P.jar:asn1rt.jar:forms_rt.jar:
-providerclass ru.CryptoPro.JCSP.JCSP

7.3 Запись в то же хранилище серверного сертификата:

::

keytool -J-Dkeytool.compat=true -import -alias 2LqFWYnVcBndh3Nc8gz9Ar5LEjnFQFjZX3j -providername JCSP -storetype CertStore -keystore node_0_certstore -storepass certstore_password -file tls_certs/2LqFWYnVcBndh3Nc8gz9Ar5LEjnFQFjZX3j.crt -providerpath JCSP.jar:JCP.jar:ASN1P.jar:asn1rt.jar:forms_rt.jar: -providerclass ru.CryptoPro.JCSP.JCSP

  1. Скопировать контейнеры с ключевыми парами к другим ключам ноды в хранилище ключей, расположенное по адресу /var/opt/cprocsp/keys/root/{username} при помощи стандартных утилит Linux - mv, cp и т. п..

Смотрите также