From 473a009905b43f39d8ce609730861e7717e2e5fa Mon Sep 17 00:00:00 2001 From: alashkova Date: Thu, 10 Oct 2024 12:17:33 +0300 Subject: [PATCH] =?UTF-8?q?SUPPORT-8592.=20=D0=9D=D0=B0=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B9=D0=BA=D0=B0=20cp=5Ffile=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=B0=20=D0=B8=D0=B7=20[sign]=20?= =?UTF-8?q?=D0=B2=20[main]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- conf/ervu-sign-module.conf.example | 2 +- src/main_conf.c | 14 ++++++++++++-- src/main_conf.h | 1 + src/modules/service_sign.c | 15 --------------- src/modules/service_sign.h | 2 -- src/service_manager.c | 7 +++++++ 7 files changed, 24 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 096a6b7..c39f2d9 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,9 @@ cmake -DCONFIG_NAME=/opt/ervu-sign-module.conf .. Приложение настраивается в конфигурационном файле, заданном на этапе сборки (по умолчанию, /etc/ervu-sign-module.conf). -- В секции **\[main\]** задать количество воркеров -worker_processes = 10 *\# значение по умолчанию: 10* +- В секции **\[main\]** задать общие настройки: +worker_processes = 10 *\# количество воркеров (значение по умолчанию: 10)* +cp_file = libcapi20.so *\# путь до файла библиотеки криптопровайдера* - В секции **\[fcgi\]** задать настройки fcgi-сервера: fcgi_listen_port = 9009 *\# значение по умолчанию: 9009, должно совпадать со значением в nginx.conf* @@ -56,7 +57,6 @@ fcgi_thread_pool_size = 1 *\# значение по умолчанию: 1* - В секции **\[sign\]** задать настройки модуля подписания: location = /sign *\# значение по умолчанию: /sign, должно совпадать со значением в nginx.conf* -cp_file = libcapi20.so *\# путь до файла библиотеки криптопровайдера* signer_subject = signer@example.ru *\# email, ИНН, СНИЛС или любая другая строка из свойства контейнера «Субъект»* pin = \*\*\*\* *\# пароль от контейнера* diff --git a/conf/ervu-sign-module.conf.example b/conf/ervu-sign-module.conf.example index 76dfb54..b6b307b 100644 --- a/conf/ervu-sign-module.conf.example +++ b/conf/ervu-sign-module.conf.example @@ -1,5 +1,6 @@ [main] #worker_processes = 10 +cp_file = /opt/cprocsp/lib/amd64/libcapi20.so [fcgi] fcgi_listen_port = 9009 @@ -8,6 +9,5 @@ fcgi_listen_host = 127.0.0.1 [sign] #location = /sign -cp_file = /opt/cprocsp/lib/amd64/libcapi20.so signer_subject = signer@example.ru pin = **** diff --git a/src/main_conf.c b/src/main_conf.c index 6bfcd56..feeb0c4 100644 --- a/src/main_conf.c +++ b/src/main_conf.c @@ -3,8 +3,9 @@ #include #include -#define MAIN_CONF_SECTION "main" -#define MAIN_CONF_KEY_WORKER_PROCESSES "worker_processes" +#define MAIN_CONF_SECTION "main" +#define MAIN_CONF_KEY_WORKER_PROCESSES "worker_processes" +#define MAIN_CONF_KEY_CP_FILE "cp_file" /* default configuration values: */ static const int FCGI_CONF_DEFAULT_WORKER_PROCESSES = 10; @@ -40,6 +41,14 @@ main_conf_load(main_conf_t* conf, const char *filename, const conf_file_context_ CONF_FILE_VALUE_POSITIVE_INT, &FCGI_CONF_DEFAULT_WORKER_PROCESSES }, + { + MAIN_CONF_SECTION, + MAIN_CONF_KEY_CP_FILE, + &(conf->cp_file), + CONF_FILE_VALUE_STRING, + CONF_FILE_VALUE_NONE, + NULL + }, }; if (conf_file_load_values(conf_file, fields, sizeof(fields) / sizeof(conf_file_field_t))) { @@ -70,6 +79,7 @@ main_conf_clear(main_conf_t* conf) return; } + free(conf->cp_file); free(conf->conf_file); memset(conf, 0, sizeof(main_conf_t)); } diff --git a/src/main_conf.h b/src/main_conf.h index 2e32634..c0af5d7 100644 --- a/src/main_conf.h +++ b/src/main_conf.h @@ -5,6 +5,7 @@ typedef struct main_conf_s { int worker_processes; + char *cp_file; /* файл криптопровайдера */ char *conf_file; } main_conf_t; diff --git a/src/modules/service_sign.c b/src/modules/service_sign.c index e368834..b4c4fe1 100644 --- a/src/modules/service_sign.c +++ b/src/modules/service_sign.c @@ -6,7 +6,6 @@ #define SIGN_CONF_SECTION "sign" #define SIGN_CONF_KEY_LOCATION "location" -#define SIGN_CONF_KEY_CP_FILE "cp_file" #define SIGN_CONF_KEY_SIGNER "signer_subject" #define SIGN_CONF_KEY_PIN "pin" @@ -64,14 +63,6 @@ sign_conf_load(sign_conf_t *conf, const conf_file_context_t conf_file) CONF_FILE_VALUE_LOCATION, &SIGN_CONF_DEFAULT_LOCATION }, - { - SIGN_CONF_SECTION, - SIGN_CONF_KEY_CP_FILE, - &(conf->cp_file), - CONF_FILE_VALUE_STRING, - CONF_FILE_VALUE_NONE, - NULL - }, { SIGN_CONF_SECTION, SIGN_CONF_KEY_SIGNER, @@ -116,7 +107,6 @@ sign_conf_clear(sign_conf_t *conf) str_t_clear(&conf->pin); str_t_clear(&conf->location); - free(conf->cp_file); free(conf->signer); memset(conf, 0, sizeof(sign_conf_t)); @@ -135,11 +125,6 @@ sign_service_create(const sign_conf_t *conf) hsign->conf = conf; - if (!cryptopro_init(conf->cp_file)) { - LOG_ERROR("Could not init Cryptographic Provider"); - goto error; - } - cryptopro_context_set(&hsign->cryptopro_ctx, conf->signer, &conf->pin); LOG_TRACE("sign_service_create exit"); diff --git a/src/modules/service_sign.h b/src/modules/service_sign.h index 9f999d0..8289199 100644 --- a/src/modules/service_sign.h +++ b/src/modules/service_sign.h @@ -11,8 +11,6 @@ typedef struct sign_service_t* HSign; typedef struct sign_conf_s { str_t location; - char *cp_file; /* файл криптопровайдера */ - char *signer; /* субъект контейнера */ str_t pin; /* pin-код от контейнера */ diff --git a/src/service_manager.c b/src/service_manager.c index 5de04de..4d8a523 100644 --- a/src/service_manager.c +++ b/src/service_manager.c @@ -1,5 +1,7 @@ #include "service_manager.h" +#include "utils/cryptopro.h" + #include @@ -217,6 +219,11 @@ init_services(service_manager_t* services, const service_manager_conf_t* service goto error; } + if (!cryptopro_init(services_cf->main_cf.cp_file)) { + LOG_ERROR("Could not init Cryptographic Provider"); + goto error; + } + services->hsign = sign_service_create(&services_cf->sign_cf); if (services->hsign == NULL) { goto error;