Установка и использование платформы
Пример подготовки артефактов для TLS¶
Поскольку канал связи по протоколу TLS между клиентом и нодой является обязательным, то в рамках настройки инфраструктуры необходимо настроить параметры связи по протоколу TLS.
Для использования канала связи по протоколу TLS для API необходимо для каждой ноды выполнить следующие шаги: .. Для работы с TLS для API необходимо получить файл keystore. Ниже представлен пример использования для этого стандартной утилиты keytool:
Создать клиентские ключевую пару и запрос на сертификат с помощью генератора 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
– в указанную в конфигурационном файле генератора директорию;файлы клиентской ключевой пары – в контейнер в хранилище ключей. В конце лога генератора указано имя контейнера; оно потребуется для дальнейшей настройки.
Отправить запрос на сертификат в УЦ и получить сертификат (клиентский сертификат).
Импортировать сертификат в контейнер с соответствующей парой ключей в хранилище ключей с помощью следующей команды:
/opt/cprocsp/bin/cryptcp -instcert -cont client_container_name client_cert.crtгде
client_containter_name
– имя контейнера, которое указано в конце лога генератора,
client_cert.crt
– полученный из УЦ файл клиентского сертификата.
Создать серверные ключевую пару и запрос на сертификат с помощью генератора 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) – в указанную в конфигурационном файле генератора директорию;
файлы серверной ключевой пары – в контейнер в хранилище ключей. В конце лога генератора указано имя контейнера; оно потребуется для дальнейшей настройки.
Отправить запрос на сертификат в УЦ и получить сертификат (серверный сертификат).
Импортировать серверный сертификат в контейнер с серверной парой ключей в хранилище ключей с помощью следующей команды:
/opt/cprocsp/bin/cryptcp -instcert -cont server_container_name server_cert.crtгде
server_containter_name
– имя контейнера, которое указано в конце лога генератора,
server_cert_file
– полученный из УЦ файл сертификата.
Сформировать хранилище сертификатов 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.JCSP7.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
Скопировать контейнеры с ключевыми парами к другим ключам ноды в хранилище ключей, расположенное по адресу /var/opt/cprocsp/keys/root/{username} при помощи стандартных утилит Linux - mv, cp и т. п..