База знаний
nginx с КриптоПро CSP 4.0 на Ubuntu 14.04 64bit
Опубликовано Наталья Мовчан on 2015-03-27 11:55

По результатам обсуждений и тестирования возникла вот такая облегченная инструкция:

Требования к устанавливаемому ПО

Для корректной работы HTTPS с использованием сервера nginx необходима установка и настройка ПО в соответствии с нижеперечисленными пунктами:
  • LSB 
  • curl (либо только библиотеки libcurl)
  • КриптоПро CSP в реализации KC2
  • gost_capi
  • OpenSSL версии не менее 1.0.1f (TLS 1.0)
  • nginx версии не менее 1.7.9

Все действия производятся от имени пользователя root.

Возможно потребуется отключение проверки https антивирусом Avast (на клиетнте)


Установка КриптоПро CSP

Установка производится в соответствии с Руководством администратора безопасности Linux (крайне рекомендуется к прочтению). 
Обязательные пакеты:
  • lsb-cprocsp-base
  • lsb-cprocsp-rdr
  • lsb-cprocsp-capilite
  • lsb-cprocsp-kc1
  • lsb-cprocsp-kc2

Пример для Ubuntu 64 bit (именно в таком порядке):
Код:
alien -kci lsb-cprocsp-base-4.0.0-4.noarch.rpm lsb-cprocsp-rdr-64-4.0.0-4.x86_64.rpm lsb-cprocsp-capilite-64-4.0.0-4.x86_64.rpm lsb-cprocsp-kc1-64-4.0.0-4.x86_64.rpm lsb-cprocsp-kc2-64-4.0.0-4.x86_64.rpm cprocsp-curl-64-4.0.0-4.x86_64.rpm


С помощью утилиты cpconfig (входит в состав дистрибутива) указать для CSP путь к libcurl (путь к cpconfig и к libcurl.so зависит от архитектуры системы)
Код:
cpconfig -ini \config\apppath -add string libcurl.so /usr/local/lib/64/libcurl.so



Установка сертификата

Сертификат сервера для создания сертифицированного решения приобретается у организации, предоставляющей услуги УЦ. 
Например, если УЦ выдал контейнер с закрытым ключом и сертификатом на носителе USB-flash, тонужно установить сертификат из контейнера командой 
Код:
/opt/cprocsp/bin/amd64/certmgr -inst -store uMy -cont '\\.\ FLASH \your_container_name' -provtype 75


Для тестов закрытый ключ с сертификатом можно получить в тестовом Центре сертификации www.cryptopro.ru/certsrv
Внимание: KC1 в имени провайдера:
Код:
/opt/cprocsp/bin/amd64/cryptcp -creatcert -provtype 75 -provname "Crypto-Pro GOST R 34.10-2001 KC1 CSP" -rdn 'CN=www.aaa.ru' -cont '\\.\HDIMAGE\test_container' -certusage 1.3.6.1.5.5.7.3.1 -ku -du -ex -ca http://cryptopro.ru/certsrv


nginix может работать только с провайдером KC2, поэтому надо привязать только что выпущенный сертификат именно к нему, для этого установим сертификат из контейрена, явно указав KC2-провайдер:
Код:
/opt/cprocsp/bin/amd64/certmgr -inst -store uMy -cont '\\.\HDIMAGE\test_container' -provtype 75 -provname "Crypto-Pro GOST R 34.10-2001 KC2 CSP"


Проверяем что есть связка ключа с сертификатом
Код:
certmgr -list -store uMy



Установка и настройка gost_capi

gost_capi – библиотека openssl, обеспечивающая поддержку ключей и алгоритмов ГОСТ.
Дистрибутив можно взять на форуме Крипто Про (для скачивания нужна регистрация) http://www.cryptopro.ru/...ts&m=55563#post55563
Документацию по установке и настройке можно скачать с сайта http://www.cryptopro.ru/...te/csp/36R3/7491/doc.zip
Пример команды по установке gost_capi:
Код:
alien -kci cprocsp-cpopenssl-gost-64-4.0.0-4.x86_64.rpm

если в процессе установки будет затребован cpopenssl, игнорировать.



Настройка OpenSSL

Настройка openssl производится путём внесения в конфигурационный файл openssl.cnf следующих параметров после old_section = new_oids и комментариев:
Код:
openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
gost_capi = gost_section

[gost_section]
engine_id = gost_capi
dynamic_path = /opt/cprocsp/cp-openssl/lib/amd64/engines/libgost_capi.so
default_algorithms = CIPHERS, DIGESTS, PKEY, PKEY_CRYPTO, PKEY_ASN1

Путь к libgost_capi.so нужно проверить и указать точно.
Далее необходимо проверить, что OpenSSL использует gost_capi командой:
Код:
openssl engine

Вывод команды может выглядеть следующим образом:
Код:
(rsax) RSAX engine support
(dynamic) Dynamic engine loading support
(gost_capi) CryptoPro ENGINE GOST CAPI ($Revision: 116890 $)



Настройка nginx

Пользователь рабочих потоков nginx не должен отличаться от пользователя запускающего nginx (http://nginx.org/ru/docs/ngx_core_module.html#user). Для этого в конфигурационном файле etc/nginx/nginx.conf укажите: 
Код:
user = <имя пользователя>

Для пользователя должен быть включен SSL http://nginx.org/ru/docs...http_ssl_module.html#ssl
При этом нужно проконтролировать наличие поддержки TLSv1
Вместо включенной ссылки на конфигурационный файл настройки SSL в самом конце файла рекомендуется записать настройку SSL, которую можно взять из /etc/nginx/conf.d/example_ssl.conf и указать следующие параметры:
Код:
# HTTPS server
server {
listen 443 ssl;
server_name localhost;

ssl_certificate /etc/nginx/cert.cer; 
ssl_certificate_key engine:gost_capi:test.ru; 
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers HIGH:MEDIUM:+GOST2001-GOST89;
ssl_prefer_server_ciphers on;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}

Подробно настройка ssl-сертификата описывается в документации к nginx http://nginx.org/ru/docs...ule.html#ssl_certificate
При этом для параметра ssl_certificate_key вместо файла указывается зарезервированное слово "engine:", после которого следует имя OpenSSL ENGINE, в нашем случае это "gost_capi", далее следует зарезервированный символ ':', за которым следует имя сертификата. Например, для сертификата "www.vpngost.ru", значение ssl_certificate_key выглядело бы так: "engine:gost_capi:www.vpngost.ru"

После внесения изменений нужно запустить или перезапустить nginx.
Проверьте, что процессы nginx запущены от одного пользователя.
Код:
ps -aux | grep nginx



Проверка работы на стороне пользователя

Для успешного соединения через браузер Internet Explorer необходимо установить на компьютер пользователя сертификат (или цепочку сертификатов) доверенного Центра сертификации. После этого нужно зайти на настроенный сайт по HTTPS.
Примечание: при использовании ранних (до марта 2015) версий КриптоПро CSP с Windows 8 и выше на компьютере пользователя для корректного соединения нужно отключить SPDY и HTTP 1.1. Для этого в свойствах IE на вкладке Дополнительно в Параметрах HTTP снимите все три флажка.
 
Обсуждение ведется на форуме.
(6 vote(s))
Helpful
Not helpful

Коментарии (0)