PayControl PKI: различия между версиями
Нет описания правки |
Нет описания правки |
||
| (не показана 1 промежуточная версия этого же участника) | |||
| Строка 1: | Строка 1: | ||
= КриптоПро УЦ = | |||
С версии 6.9.0, PC может быть подключён к КриптоПро УЦ 2.0 (исполнение 15 и 16) для выпуска сертификатов пользователям PC. | |||
Коннектор к УЦ КриптоПро является модулем компонента PCS. Взаимодействие с УЦ КриптоПро ведётся через его компонент — центр регистрации. | |||
Для работы с УЦ КриптоПро необходимо включить коннектор, настроить его, добавить ключ для аутентификации запросов в центр регистрации (или два раздельных ключа, один для mTLS, второй для подписания запросов к ЦР), добавить корневой сертификат УЦ для проверки аутентичности сервера при подключении. | |||
== Конфигурирование PKI коннектора == | |||
=== Указание пути к файлу конфигурации PKI коннектора === | |||
Путь к файлу конфигурации устанавливается в настройках сервера PCS в параметре <code>PKI_SETTINGS_PATH</code>. Значением по умолчанию является <code>/opt/pc/pki/pki-settings.properties</code>. Способ установки описан в [https://repo.paycontrol.org/server/doc/latest/pc-reference-guide/ru/#установка-параметров|справочном руководстве]. | |||
=== Состав файла конфигурации === | |||
<syntaxhighlight lang="shell"># Connector type selection (MUST not be changed to use this connector) | |||
# Указание типа коннектора (не подлежит изменению при использовании этого коннектора) | |||
caType=CPCA20 | |||
# Alias of the Operator's private key and certificate stored in HDImage | |||
# Алиас закрытого ключа и сертификата оператора в HDImage хранилище (используется для установки mTLS и подписи запросов к УЦ) | |||
cpca20OperatorKeyAlias=Operator-1 | |||
# Password to the Operator's private key container | |||
# Пароль закрытого ключа оператора | |||
cpca20OperatorKeyPassword= | |||
# Trusted certificates in PEM for establishing TLS connection with CA | |||
# Путь к файлу с доверенными сертификатами | |||
cpca20TrustedCertificatesPath=/opt/pc/cp_ca/etc/904C46A177CC4BAA6B683AD47E4BF625FADD166B.pem | |||
# URL for the CA 2.0 instance | |||
# Адрес центра регистрации УЦ КриптоПро для взаимодействия | |||
cpca20InteractionUrl=https://cpca.loc | |||
# URL for the CA 2.0 distribution point | |||
# Адрес распространения списков отзывов сертификатов | |||
cpca20CrlDp=http://cpca.loc/cdp/904C46A177CC4BAA6B683AD47E4BF625FADD166B.crl | |||
# OID for the custom component in subject's DN (UnstructuredName) | |||
# OID для поля UnstructuredName | |||
cacp20UserNameOID=1.2.840.113549.1.9.2 | |||
# OID for the certificate template to be included in the extensions of certificate requests | |||
# OID шаблона сертификата для включения в расширение в запросе сертификата | |||
cacp20CertTemplateOID=1.2.643.2.999.1.1.1 | |||
# Folder to be used when creating users at RA | |||
# Папка, в которой создаются сертификаты пользователей в ЦР УЦ КриптоПро | |||
cacp20RegistrationFolder=Ra | |||
# Whether to use specified CRL DP for certificate checking (useful when CRL DP is not included into certificate extensions) | |||
# Флаг разрешающий использование установленного в cpca20CrlDp адреса для получения списка отзыва сертификатов (для случаев, если в сертификате не указана точка распространения списка отзывов) | |||
cacp20UseCrlDpForCertificateValidation=true | |||
# Timeout in milliseconds for establishing connection with CA | |||
# Время ожидания установки TCP соединения с УЦ в мс | |||
cacp20ConnectionTimeout=2000 | |||
# Timeout in milliseconds for requesting connection from the connection manager | |||
# Время ожидания готовности сервера принять запрос в мс | |||
cacp20ConnectionRequestTimeout=2000 | |||
# Timeout in milliseconds for getting response from CA | |||
# Время ожидания ответа от УЦ в мс | |||
cacp20ResponseTimeout=2000</syntaxhighlight> | |||
=== Сертификат УЦ === | |||
Сертификат УЦ необходимо разместить в доступном для сервиса месте (например в <code>/opt/pc/cp_ca/etc/</code>), и указать путь к этому файлу в параметре <code>cpca20TrustedCertificatesPath</code> конфигурационного файла. | |||
== Размещение ключей == | |||
Файлы ключа и сертификата оператора в формате КриптоПро CSP HDImage необходимо разместить по по пути <code>/var/opt/cprocsp/keys/user/OperatorKeyAlias</code>, где вместо значений: | |||
* <code>ProcessUsername</code> должено быть указано имя пользователя, под которым запущен процесс PCS; | |||
* <code>OperatorKeyAlias</code> должен быть указан алиас оператора (для приведённого примера файла конфигурации это будет <code>Operator-1</code> и путь будет следующий <code>/var/opt/cprocsp/keys/user/Operator-1</code>). | |||
Владельцем директорий <code>ProcessUsername/OperatorKeyAlias</code> и файлов ключей должен быть пользователь, под которым запущен процесс PCS. | |||
= OpenSSL = | = OpenSSL = | ||
| Строка 175: | Строка 256: | ||
[[Категория:PKI]] | [[Категория:PKI]] | ||
[[Категория:Сертификаты]] | [[Категория:Сертификаты]] | ||
[[Категория:КриптоПро УЦ]] | |||
Текущая версия от 23:03, 28 января 2026
КриптоПро УЦ
С версии 6.9.0, PC может быть подключён к КриптоПро УЦ 2.0 (исполнение 15 и 16) для выпуска сертификатов пользователям PC.
Коннектор к УЦ КриптоПро является модулем компонента PCS. Взаимодействие с УЦ КриптоПро ведётся через его компонент — центр регистрации.
Для работы с УЦ КриптоПро необходимо включить коннектор, настроить его, добавить ключ для аутентификации запросов в центр регистрации (или два раздельных ключа, один для mTLS, второй для подписания запросов к ЦР), добавить корневой сертификат УЦ для проверки аутентичности сервера при подключении.
Конфигурирование PKI коннектора
Указание пути к файлу конфигурации PKI коннектора
Путь к файлу конфигурации устанавливается в настройках сервера PCS в параметре PKI_SETTINGS_PATH. Значением по умолчанию является /opt/pc/pki/pki-settings.properties. Способ установки описан в руководстве.
Состав файла конфигурации
# Connector type selection (MUST not be changed to use this connector)
# Указание типа коннектора (не подлежит изменению при использовании этого коннектора)
caType=CPCA20
# Alias of the Operator's private key and certificate stored in HDImage
# Алиас закрытого ключа и сертификата оператора в HDImage хранилище (используется для установки mTLS и подписи запросов к УЦ)
cpca20OperatorKeyAlias=Operator-1
# Password to the Operator's private key container
# Пароль закрытого ключа оператора
cpca20OperatorKeyPassword=
# Trusted certificates in PEM for establishing TLS connection with CA
# Путь к файлу с доверенными сертификатами
cpca20TrustedCertificatesPath=/opt/pc/cp_ca/etc/904C46A177CC4BAA6B683AD47E4BF625FADD166B.pem
# URL for the CA 2.0 instance
# Адрес центра регистрации УЦ КриптоПро для взаимодействия
cpca20InteractionUrl=https://cpca.loc
# URL for the CA 2.0 distribution point
# Адрес распространения списков отзывов сертификатов
cpca20CrlDp=http://cpca.loc/cdp/904C46A177CC4BAA6B683AD47E4BF625FADD166B.crl
# OID for the custom component in subject's DN (UnstructuredName)
# OID для поля UnstructuredName
cacp20UserNameOID=1.2.840.113549.1.9.2
# OID for the certificate template to be included in the extensions of certificate requests
# OID шаблона сертификата для включения в расширение в запросе сертификата
cacp20CertTemplateOID=1.2.643.2.999.1.1.1
# Folder to be used when creating users at RA
# Папка, в которой создаются сертификаты пользователей в ЦР УЦ КриптоПро
cacp20RegistrationFolder=Ra
# Whether to use specified CRL DP for certificate checking (useful when CRL DP is not included into certificate extensions)
# Флаг разрешающий использование установленного в cpca20CrlDp адреса для получения списка отзыва сертификатов (для случаев, если в сертификате не указана точка распространения списка отзывов)
cacp20UseCrlDpForCertificateValidation=true
# Timeout in milliseconds for establishing connection with CA
# Время ожидания установки TCP соединения с УЦ в мс
cacp20ConnectionTimeout=2000
# Timeout in milliseconds for requesting connection from the connection manager
# Время ожидания готовности сервера принять запрос в мс
cacp20ConnectionRequestTimeout=2000
# Timeout in milliseconds for getting response from CA
# Время ожидания ответа от УЦ в мс
cacp20ResponseTimeout=2000
Сертификат УЦ
Сертификат УЦ необходимо разместить в доступном для сервиса месте (например в /opt/pc/cp_ca/etc/), и указать путь к этому файлу в параметре cpca20TrustedCertificatesPath конфигурационного файла.
Размещение ключей
Файлы ключа и сертификата оператора в формате КриптоПро CSP HDImage необходимо разместить по по пути /var/opt/cprocsp/keys/user/OperatorKeyAlias, где вместо значений:
ProcessUsernameдолжено быть указано имя пользователя, под которым запущен процесс PCS;OperatorKeyAliasдолжен быть указан алиас оператора (для приведённого примера файла конфигурации это будетOperator-1и путь будет следующий/var/opt/cprocsp/keys/user/Operator-1).
Владельцем директорий ProcessUsername/OperatorKeyAlias и файлов ключей должен быть пользователь, под которым запущен процесс PCS.
OpenSSL
Конфигурирование PKI коннектора
Путь к конфигурационному файлу коннектора
Настройку необходимо внести в pc_sys_property БД PCS.
PKI_SETTINGS_PATH | /opt/pc/pki/pki-settings.properties
Пример для PostgreSQL:
insert into pc_sys_property values (nextval('pc_setting_seq'), 'PKI_SETTINGS_PATH', '/opt/pc/pki/pki-settings.properties');
Пример конфигурационного файла
# check certificate's expiration, cert path and other constrains during each cert use
checkCertificates=true
# check certificate revocation status, to use checkCertificates must be true
checkRevocation=true
useCRL=true
useOCSP=false
# -- OpenSSL Settings
caType=OpenSSL
issueCertificateCmd=/opt/pc/pki/issue_cert.sh
revokeCertificateCmd=/opt/pc/pki/revoke_cert.sh
# files prefixes must contain path where tmp files will be stored
csrTmpFilePrefix=pc-openssl-connector-csr-
certTmpFilePrefix=pc-openssl-connector-cert-
# certificate chain in PEM-format
# the first certificate must be CA (self-signed), second - 1st intermediate, third - 2nd intermediate and so on
# if checkRevocation is true, then each of intermediate certificates must contain OCSP url or CRL Distribution point
caChainFileName=/opt/pc/pki/Intermediate_CA/certs/intermediate.chain.pem
Пример файла выпуска сертификата
ECDSA
#!/bin/sh
CA_DIR=/opt/pc/pki/Intermediate_CA
KEY_PASS=secretpassword
DER_CSR_FILE_NAME=$1
DER_CSR_BASE_FILE_NAME="$(basename -- $DER_CSR_FILE_NAME)"
DER_CSR_BASE_FILE_NAME="${DER_CSR_BASE_FILE_NAME%.*}"
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der
DEST_CERT_FILE_NAME=$2
cd $CA_DIR
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md sha256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME
ГОСТ
#!/bin/sh
CA_DIR=/opt/pc/pki/Intermediate_CA
KEY_PASS=secretpassword
DER_CSR_FILE_NAME=$1
DER_CSR_BASE_FILE_NAME="$(basename -- $DER_CSR_FILE_NAME)"
DER_CSR_BASE_FILE_NAME="${DER_CSR_BASE_FILE_NAME%.*}"
PEM_CSR_FILE_NAME=csr/$DER_CSR_BASE_FILE_NAME.pem
PEM_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.pem
DER_CERT_FILE_NAME=certs/$DER_CSR_BASE_FILE_NAME.cert.der
DEST_CERT_FILE_NAME=$2
cd $CA_DIR
openssl req -inform DER -in $DER_CSR_FILE_NAME -out $PEM_CSR_FILE_NAME
openssl ca -config openssl.cnf -extensions usr_cert -days 375 -notext -md gost12_256 -in $PEM_CSR_FILE_NAME -out $PEM_CERT_FILE_NAME -passin pass:$KEY_PASS -batch
openssl x509 -outform der -in $PEM_CERT_FILE_NAME -out $DER_CERT_FILE_NAME
cp $DER_CERT_FILE_NAME $DEST_CERT_FILE_NAME
Пример файла отзыва сертификата
#!/bin/sh
CERT_FILE_NAME=$1
KEY_PASS=secretpassword
CA_DIR=/opt/pc/pki/Intermediate_CA
INTERMEDIATE_CRL_LOCATION=crl/intermediate.crl
cd $CA_DIR
#revoke
openssl ca -config openssl.cnf -revoke $CERT_FILE_NAME -passin pass:$KEY_PASS
#publish CRL
openssl ca -config openssl.cnf -gencrl -out $INTERMEDIATE_CRL_LOCATION -passin pass:$KEY_PASS
cp -v $INTERMEDIATE_CRL_LOCATION /opt/pc/pki/pub/crl/
Пример файла скрипта публикации списка отзыва корневого УЦ
#!/bin/bash
openssl ca \
-config /opt/pc/pki/Root_CA/openssl_host.cnf \
-gencrl \
-out /opt/pc/pki/Root_CA/crl/root.crl \
-passin pass:secretpassword
cp /opt/pc/pki/Root_CA/crl/root.crl /opt/pc/pki/pub/crl/
Пример файла скрипта публикации списка отзыва промежуточного УЦ
#!/bin/bash
openssl ca \
-config /opt/pc/pki/Intermediate_CA/openssl_host.cnf \
-gencrl \
-out /opt/pc/pki/Intermediate_CA/crl/intermediate.crl \
-passin pass:secretpassword
cp /opt/pc/pki/Intermediate_CA/crl/intermediate.crl /opt/pc/pki/pub/crl/
Включение ГОСТ в OpenSSL
Установка модуля ГОСТ
Для работы OpenSSL с криптоалгоритмами ГОСТ необходимо установить криптографическую библиотеку и настроить работу с этой библиотекой в конфигурационном файле, для этого:
- Установите пакет
openssl-gost-engine, либо, если его нет в репозитории Вашего дистрибутива, скачайте по ссылке https://repo.paycontrol.org/cdn/artefacts/gost-engine/engine/gost.so (sha256sum:435a0dee3273d924458c14ad57ac44b0711aa37fb3df9f2ba987a118f2339b1f gost.so) и разместите скаченный файл криптобиблиотеки в директории модулей OpenSSL (в зависимости от дистрибутива это может быть/usr/lib/engines-3/, или, например/usr/lib64/engines-3/). - В кофигурационный файл OpenSSL добавьте:, где в качестве значения
openssl_conf = openssl_def [openssl_def] engines = engine_section [engine_section] gost = gost_section [gost_section] engine_id = gost dynamic_path = /usr/lib/engines-3/gost.so default_algorithms = ALL
dynamic_pathдолжен быть указан путь к библиотекеgost.so. - В кофигурационном файле OpenSSL параметру
default_mdнеобходимо установить значениеmd_gost12_256.
Пример команд для создания корневого и промежуточного ГОСТ-УЦ в OpenSSL
Создание корневого сертификата
openssl genpkey -config openssl_intermediate.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/root.key.pem
openssl req -config openssl_intermediate.cnf -key private/root.key.pem -passin pass:${PKI_KEY_PASS} -new -x509 -days 7300 -md_gost12_256 -extensions v3_ca -subj "${PKI_ROOT_SUBJECT}" -out certs/root.cert.pem
Создание ключа и запроса для промежуточного УЦ
openssl genpkey -config openssl_root.cnf -pass pass:$KEY_PASS -algorithm gost2012_256 -pkeyopt paramset:A -out private/intermediate.key.pem
openssl req -config openssl_root.cnf -key private/intermediate.key.pem -passin pass:${PKI_KEY_PASS} -new -md_gost12_256 -subj "${PKI_INTERMEDIATE_SUBJECT}" -out csr/intermediate.csr.pem
Выпуск сертификата для промежуточного УЦ
openssl ca -config openssl_intermediate.cnf -extensions v3_intermediate_ca -passin pass:${PKI_KEY_PASS} -days 3650 -notext -md gost12_256 -in ../Intermediate_CA/csr/intermediate.csr.pem -out ../Intermediate_CA/certs/intermediate.cert.pem -out certs/intermediate.cert.pem -batch