Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC) Сообщений: 1,506 Откуда: КРИПТО-ПРО
Сказал(а) «Спасибо»: 35 раз Поблагодарили: 474 раз в 338 постах
|
Автор: sturi7l Да я и не в претензии. Просто в инструкции об этом ни слова, в свое время потратил на это какое-то количество времени. Может быть, имеет смысл отразить? Что именно необходимо отразить? Скрипты в данной теме полностью рабочие. Мы их проверяем. У пользователя может быть множество нюансов, если он действует самостоятельно. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.08.2018(UTC) Сообщений: 12
Сказал(а) «Спасибо»: 6 раз Поблагодарили: 2 раз в 1 постах
|
Добрый день, коллеги. Стоит задача настроить nginx таким образом, чтобы на вход приходили данные по протоколу HTTP и проксировались на другой сервер по протоколу HTTPS + GOST2012-GOST8912-GOST8912. Возникает ошибка: Код:[crit] 30199#30199: *19 SSL_do_handshake() failed (SSL: error:80005022:lib(128):gng_support_create_pubkey_3410:CryptImportPublicKeyInfo error:0B09407D:x509 certificate routines:x509_pubkey_decode:public key decode error error:1416F0EF:SSL routines:tls_process_server_certificate:unable to find public key parameters) while SSL handshaking to upstream, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", upstream: "https://x.x.x.x:3000/", host: "localhost:3000"
При этом, если попытаться сделать запрос с помощью curl, который идет в поставке CSP, напрямую на целевой сервер по HTTPS - всё ок. Nginx и CSP устанавливались с помощью скрипта. Код:CentOS Linux release 7.5.1804 (Core)
Код:[root@test-sandbox-1 ~]# yum list | grep cprocsp
cprocsp-cpopenssl-110-64.x86_64 5.0.11099-5 installed
cprocsp-cpopenssl-110-base.noarch 5.0.11099-5 installed
cprocsp-cpopenssl-110-devel.noarch
cprocsp-cpopenssl-110-gost-64.x86_64
cprocsp-curl-64.x86_64 5.0.11128-5 installed
lsb-cprocsp-base.noarch 5.0.11128-5 installed
lsb-cprocsp-ca-certs.noarch 5.0.11128-5 installed
lsb-cprocsp-capilite-64.x86_64 5.0.11128-5 installed
lsb-cprocsp-kc1-64.x86_64 5.0.11128-5 installed
lsb-cprocsp-kc2-64.x86_64 5.0.11128-5 installed
lsb-cprocsp-rdr-64.x86_64 5.0.11128-5 installed
Код:[root@test-sandbox-1 ~]# nginx -V
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
built with OpenSSL 1.1.0h 27 Mar 2018
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=root --group=nginx --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
Код:[root@test-sandbox-1 ~]# ldd /usr/sbin/nginx
linux-vdso.so.1 => (0x00007ffd3ac70000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fefc5f1d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fefc5d01000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fefc5aca000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fefc5868000)
libssl.so.1.1 => /opt/cprocsp/cp-openssl-1.1.0/lib/amd64/libssl.so.1.1 (0x00007fefc55fa000)
libcrypto.so.1.1 => /opt/cprocsp/cp-openssl-1.1.0/lib/amd64/libcrypto.so.1.1 (0x00007fefc5175000)
libz.so.1 => /lib64/libz.so.1 (0x00007fefc4f5f000)
libc.so.6 => /lib64/libc.so.6 (0x00007fefc4b92000)
/lib64/ld-linux-x86-64.so.2 (0x00007fefc647a000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007fefc498f000)
Код:[root@test-sandbox-1 ~]# /opt/cprocsp/cp-openssl-1.1.0/bin/amd64/openssl engine
(rdrand) Intel RDRAND engine
(dynamic) Dynamic engine loading support
(gostengy) CryptoPro GostEngy ($Revision: 174535 $)
Конфигурация nginx: Код: server {
listen 3000;
location / {
proxy_pass https://x.x.x.x:3000;
proxy_ssl_verify off;
proxy_ssl_ciphers GOST2012-GOST8912-GOST8912:HIGH;
proxy_ssl_protocols TLSv1.2;
}
}
В чем может быть проблема?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC) Сообщений: 1,506 Откуда: КРИПТО-ПРО
Сказал(а) «Спасибо»: 35 раз Поблагодарили: 474 раз в 338 постах
|
Автор: Mikhail0101 Стоит задача настроить nginx таким образом, чтобы на вход приходили данные по протоколу HTTP и проксировались на другой сервер по протоколу HTTPS + GOST2012-GOST8912-GOST8912. Возникает ошибка: Код:[crit] 30199#30199: *19 SSL_do_handshake() failed (SSL: error:80005022:lib(128):gng_support_create_pubkey_3410:CryptImportPublicKeyInfo error:0B09407D:x509 certificate routines:x509_pubkey_decode:public key decode error error:1416F0EF:SSL routines:tls_process_server_certificate:unable to find public key parameters) while SSL handshaking to upstream, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", upstream: "https://x.x.x.x:3000/", host: "localhost:3000"
... Конфигурация nginx: Код: server {
listen 3000;
location / {
proxy_pass https://x.x.x.x:3000;
proxy_ssl_verify off;
proxy_ssl_ciphers GOST2012-GOST8912-GOST8912:HIGH;
proxy_ssl_protocols TLSv1.2;
}
}
В чем может быть проблема? А что за сервер https? Как нам воспроизвести ошибку? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.08.2018(UTC) Сообщений: 12
Сказал(а) «Спасибо»: 6 раз Поблагодарили: 2 раз в 1 постах
|
Цитата:А что за сервер https? Как нам воспроизвести ошибку? HTTPS сервер на базе MS IIS и КриптоПро CSP 4.x Код:[root@test-sandbox-1 ~]$ /opt/cprocsp/cp-openssl-1.1.0/bin/amd64/openssl s_client -connect x.x.x.x:3000
CONNECTED(00000005)
depth=0 CN = xxxxxxxxx
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = xxxxxxxxx
verify error:num=21:unable to verify the first certificate
verify return:1
---
...
---
No client certificate CA names sent
---
SSL handshake has read 1583 bytes and written 413 bytes
Verification error: unable to verify the first certificate
---
New, TLSv1.0, Cipher is GOST2012-GOST8912-GOST8912
Server public key is 512 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : GOST2012-GOST8912-GOST8912
Session-ID: E58378F2F15683D6AD17B4FCB050D7957CB8E0A2A8AC928C8663AAED9CED10D9
Session-ID-ctx:
Master-Key: DFDB7E1DF021E2C8CFE642F1BC07D765399DE748A04C0255ECA162FE93D65F60FEDC106A3AAA39967D9CF8C21C1770FA
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1535528772
Timeout : 7200 (sec)
Verify return code: 21 (unable to verify the first certificate)
Extended master secret: no
---
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC) Сообщений: 1,506 Откуда: КРИПТО-ПРО
Сказал(а) «Спасибо»: 35 раз Поблагодарили: 474 раз в 338 постах
|
Автор: Mikhail0101 Цитата:А что за сервер https? Как нам воспроизвести ошибку? HTTPS сервер на базе MS IIS и КриптоПро CSP 4.x Всё должно работать без проблем, не видим ошибок со своей стороны. Давайте включим логирование на уровне CSP и посмотрим полученные логи. Код:cpconfig -loglevel cpcsp -mask 0x3F
cpconfig -loglevel capi10 -mask 0x3F
cpconfig -loglevel cpext -mask 0x3F
cpconfig -loglevel capi20 -mask 0x3F
cpconfig -loglevel capilite -mask 0x3F
cpconfig -loglevel cryptsrv -mask 0x3F
cpconfig -loglevel cpcsp_fmt -mask 0x7F
cpconfig -loglevel capi10_fmt -mask 0x7F
cpconfig -loglevel cpext_fmt -mask 0x7F
cpconfig -loglevel capi20_fmt -mask 0x7F
cpconfig -loglevel capilite_fmt -mask 0x7F
cpconfig -loglevel cryptsrv_fmt -mask 0x7F
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.08.2018(UTC) Сообщений: 12
Сказал(а) «Спасибо»: 6 раз Поблагодарили: 2 раз в 1 постах
|
Включил логирование CSP, перезапустил nginx - новых ошибок в логах (/var/log/nginx/error.log, /var/log/messages) не появилось...
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC) Сообщений: 1,506 Откуда: КРИПТО-ПРО
Сказал(а) «Спасибо»: 35 раз Поблагодарили: 474 раз в 338 постах
|
Автор: Mikhail0101 Включил логирование CSP, перезапустил nginx - новых ошибок в логах (/var/log/nginx/error.log, /var/log/messages) не появилось... Да, ошибка оказалась крепким орешком. При типичном использовании nginx в качестве сервера, всегда есть ссылка на закрытый ключ через gostengy, поэтому криптографический модуль OpenSSL никогда не выгружается. В вашей конфигурации нет ссылок на gostengy, так как у вас в конфигурации только клиентское соединение, не использующее закрытый ключ. При такой конфигурации, мастер процесс nginx после запуска рабочих процессов делает cleanup, который освобождает неиспользуемые модули, что приводит к освобождению глобального контекста, который общий для всех процессов. После этого рабочие процессы не могут пользоваться контекстом, так как он был освобождён. Это исправлено. Проверено. Скрипты обновлены. |
|
1 пользователь поблагодарил pd за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.08.2018(UTC) Сообщений: 12
Сказал(а) «Спасибо»: 6 раз Поблагодарили: 2 раз в 1 постах
|
Дмитрий, спасибо за помощь и, особенно, за оперативность. Проверил на своей стороне - теперь всё работает. На всякий случай, оставлю пример конфигурации nginx в качестве прокси к серверу по протоколу https/tls с алгоритмами ГОСТ 2012, вдруг кому пригодится: Код:user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen xxxx;
location / {
proxy_pass https://x.x.x.x:xxxx;
proxy_ssl_verify off;
proxy_ssl_ciphers GOST2012-GOST8912-GOST8912:HIGH;
proxy_ssl_protocols TLSv1.2;
# Если предполагается двухсторонний TLS, то нужно указать клиентский сертификат и приватный ключ параметрами proxy_ssl_certificate и proxy_ssl_certificate_key соответственно
# proxy_ssl_certificate /etc/nginx/client.pem;
# proxy_ssl_certificate_key engine:gostengy:client;
}
}
}
|
2 пользователей поблагодарили Mikhail0101 за этот пост.
|
pd оставлено 31.08.2018(UTC), jjjbushjjj оставлено 15.09.2018(UTC)
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 15.09.2018(UTC) Сообщений: 7 Откуда: Moscow Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Mikhail0101 Дмитрий, спасибо за помощь и, особенно, за оперативность. Проверил на своей стороне - теперь всё работает. На всякий случай, оставлю пример конфигурации nginx в качестве прокси к серверу по протоколу https/tls с алгоритмами ГОСТ 2012, вдруг кому пригодится: Код:user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen xxxx;
location / {
proxy_pass https://x.x.x.x:xxxx;
proxy_ssl_verify off;
proxy_ssl_ciphers GOST2012-GOST8912-GOST8912:HIGH;
proxy_ssl_protocols TLSv1.2;
# Если предполагается двухсторонний TLS, то нужно указать клиентский сертификат и приватный ключ параметрами proxy_ssl_certificate и proxy_ssl_certificate_key соответственно
# proxy_ssl_certificate /etc/nginx/client.pem;
# proxy_ssl_certificate_key engine:gostengy:client;
}
}
}
Михаил, не могли бы вы показать как вы сгенерили клиентский сертификат? Если вы это делали (То что закоментировано). Я никак не могу сделать сертификат который бы принимали удаленные сервера. Конфиг у меня +- такойже.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.08.2018(UTC) Сообщений: 12
Сказал(а) «Спасибо»: 6 раз Поблагодарили: 2 раз в 1 постах
|
Автор: jjjbushjjj Михаил, не могли бы вы показать как вы сгенерили клиентский сертификат? Если вы это делали (То что закоментировано). Я никак не могу сделать сертификат который бы принимали удаленные сервера. Конфиг у меня +- такойже.
Клиентский сертификат для тестовых нужд генерил через тестовый УЦ КриптоПро по второй ссылке на странице https://www.cryptopro.ru/solutions/test-caНужно также убедиться, что сертификат имеет кодировку PEM, как указано здесь https://www.cryptopro.ru...ts&m=83282#post83282
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close