PayControl PKI — различия между версиями

Материал из PayControl Wiki
Перейти к: навигация, поиск
(Новая страница: «== Путь к конфигурационному файлу коннектора == Настройку необходимо внести в pc_sys_property БД…»)
 
 
Строка 1: Строка 1:
== Путь к конфигурационному файлу коннектора ==
+
= OpenSSL =
 +
 
 +
== Конфигурирование PKI коннектора ==
 +
 
 +
=== Путь к конфигурационному файлу коннектора ===
  
 
Настройку необходимо внести в pc_sys_property БД PCS.
 
Настройку необходимо внести в pc_sys_property БД PCS.
Строка 7: Строка 11:
 
Пример для PostgreSQL:<syntaxhighlight lang="sql">insert into pc_sys_property values (nextval('pc_setting_seq'), 'PKI_SETTINGS_PATH', '/opt/pc/pki/pki-settings.properties');</syntaxhighlight>
 
Пример для PostgreSQL:<syntaxhighlight lang="sql">insert into pc_sys_property values (nextval('pc_setting_seq'), 'PKI_SETTINGS_PATH', '/opt/pc/pki/pki-settings.properties');</syntaxhighlight>
  
== Пример конфигурационного файла ==
+
=== Пример конфигурационного файла ===
  
 
<syntaxhighlight lang="shell">
 
<syntaxhighlight lang="shell">
Строка 34: Строка 38:
  
 
== Пример файла выпуска сертификата ==
 
== Пример файла выпуска сертификата ==
 +
 +
=== ECDSA ===
  
 
<syntaxhighlight lang="shell">
 
<syntaxhighlight lang="shell">
Строка 57: Строка 63:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
=== ГОСТ ===
 +
 +
<syntaxhighlight lang="shell">
 +
#!/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
 +
</syntaxhighlight>
 
== Пример файла отзыва сертификата ==
 
== Пример файла отзыва сертификата ==
  
Строка 75: Строка 103:
 
cp -v $INTERMEDIATE_CRL_LOCATION /opt/pc/pki/pub/crl/
 
cp -v $INTERMEDIATE_CRL_LOCATION /opt/pc/pki/pub/crl/
 
</syntaxhighlight>
 
</syntaxhighlight>
 
  
 
== Пример файла скрипта публикации списка отзыва корневого УЦ ==
 
== Пример файла скрипта публикации списка отзыва корневого УЦ ==
Строка 101: Строка 128:
 
cp /opt/pc/pki/Intermediate_CA/crl/intermediate.crl /opt/pc/pki/pub/crl/
 
cp /opt/pc/pki/Intermediate_CA/crl/intermediate.crl /opt/pc/pki/pub/crl/
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== Включение ГОСТ в OpenSSL ==
 +
 +
=== Установка модуля ГОСТ ===
 +
 +
Для работы OpenSSL с криптоалгоритмами ГОСТ необходимо установить криптографическую библиотеку и настроить работу с этой библиотекой в конфигурационном файле, для этого:
 +
 +
* Установите пакет <code>openssl-gost-engine</code>, либо, если его нет в репозитории Вашего дистрибутива, скачайте по ссылке https://repo.paycontrol.org/cdn/artefacts/gost-engine/engine/gost.so (sha256sum: <code>435a0dee3273d924458c14ad57ac44b0711aa37fb3df9f2ba987a118f2339b1f  gost.so</code>) и разместите скаченный файл криптобиблиотеки в директории модулей OpenSSL (в зависимости от дистрибутива это может быть <code>/usr/lib/engines-3/</code>, или, например <code>/usr/lib64/engines-3/</code>).
 +
* В кофигурационный файл OpenSSL добавьте:<syntaxhighlight lang="shell">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 </syntaxhighlight>, где в качестве значения <code>dynamic_path</code> должен быть указан путь к библиотеке <code>gost.so</code>.
 +
* В кофигурационном файле OpenSSL параметру <code>default_md</code> необходимо установить значение <code>md_gost12_256</code>.
 +
 +
== Пример команд для создания корневого и промежуточного ГОСТ-УЦ в OpenSSL ==
 +
 +
=== Создание корневого сертификата ===
 +
 +
<syntaxhighlight lang="shell">
 +
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
 +
</syntaxhighlight>
 +
 +
=== Создание ключа и запроса для промежуточного УЦ ===
 +
 +
<syntaxhighlight lang="shell">
 +
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
 +
</syntaxhighlight>
 +
 +
=== Выпуск сертификата для промежуточного УЦ ===
 +
 +
<syntaxhighlight lang="shell">
 +
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
 +
</syntaxhighlight>
 +
 +
[[Категория:OpenSSL]]
 +
[[Категория:PKI]]
 +
[[Категория:Сертификаты]]

Текущая версия на 01:34, 26 июня 2025

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