Nginx с поддержкой шифрования по ГОСТ на Astra Linux Smolensk 1.6
Опубликовано Павел Заика on 2021-06-10 14:04

В данной статье описана установка Nginx с поддержкой шифрования по ГОСТ на Astra Linux Smolensk 1.6 

Скачиваем дистрибутив КриптоПро CSP с сайта.

Распаковываем и устанавливаем КриптоПро CSP КС1 с дополнительными компонентами lsb-cprocsp-devel:
tar -xvf ./linux-amd64_deb.tgz && cd ./linux-amd64_deb/
sudo ./install.sh kc1 lsb-cprocsp-devel cprocsp-stunnel

Для сборки Nginx на Astra Smolensk 1.6 SE необходимо установить пакеты build-essential и patch.

Скачиваем актуальный devel DVD - https://download.astralinux.ru/astra/stable/smolensk/devel/1.6/
Монтируем:
sudo apt-cdrom add
sudo apt update
sudo apt-get install build-essential patch

Скачиваем Nginx и накладываем патч:
wget https://nginx.org/download/nginx-1.18.0.tar.gz
tar -xvf ./nginx-1.18.0.tar.gz
cp ./ng-nginx.1.18.0.patch ./nginx-1.18.0 && cd ./nginx-1.18.0/
patch -p1 < ./ng-nginx.1.18.0.patch

Получаем дополнительные исходные тексты:
wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz
tar -xvf ./pcre-8.45.tar.gz
wget https://zlib.net/zlib-1.2.13.tar.gz
tar -xvf ./zlib-1.2.13.tar.gz
wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
tar -xvf ./openssl-1.1.1o.tar.gz

Собираем (предварительно проверив пути):
./configure \
--user=nginx \
--group=nginx \
--with-cc-opt='-fstack-protector -fstack-protector-strong --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Werror=implicit-function-declaration -Winit-self -Wp,-D_FORTIFY_SOURCE=2 -fPIC' \
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie -L/opt/cprocsp/lib/amd64 -lrdrsup -lssp -lcapi10 -lcapi20' \
--prefix=/opt/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--lock-path=/var/run/lock/nginx.lock \
--pid-path=/var/run/nginx.pid \
--with-pcre=./pcre-8.45/ \
--with-pcre-jit \
--with-zlib=./zlib-1.2.13/ \
--with-http_ssl_module \
--with-http_sspi_module \
--with-http_stub_status_module \
--with-openssl=./openssl-1.1.1o/ \
--with-openssl-opt='no-gost no-comp no-dtls no-deprecated no-dynamic-engine no-engine no-hw-padlock no-nextprotoneg no-psk no-tests no-ts no-ui-console no-ocsp' \
--with-stream \
--with-stream_ssl_module \
--with-stream_sspi_module \
--with-http_v2_module

Для rhel based дистрибутивов добавляются опции:
--with-pcre-opt=-fPIC --with-zlib-opt=-fPIC

Копируем базовый конфиг в директорию с кодом:
sudo cp ./nginx.conf.sample ./nginx-1.18.0/conf/nginx.conf
make
sudo make install

Создаем системного пользователя:
sudo adduser --system --no-create-home --group nginx
sudo chown -R nginx:nginx /var/log/nginx/

Переносим init скрипт:
sudo cp ./nginx.init /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx
sudo systemctl daemon-reload

Создаем запрос на сертификат для Nginx:
sudo -u nginx /opt/cprocsp/bin/amd64/cryptcp -creatrqst -provtype 80 -rdn 'CN=Astra, C=RU ,S=77 Москва, L=г. Москва' -certusage 1.3.6.1.5.5.7.3.1 -cont '\\.\HDIMAGE\nginx1' -ex /tmp/request.req

Выпускаем на УЦ сертификат по запросу и устанавливаем в контейнре:
sudo -u nginx /opt/cprocsp/bin/amd64/certmgr -install -store uMy -cont '\\.\HDIMAGE\nginx1' -file /tmp/user.crt


Дополнительная информация и пример конфигурационного файла по ссылке

Доступность сервиса проверяем с помощью:

csptest
/opt/cprocsp/bin/amd64/csptest -tlsc -server host_name -v

браузера с поддержкой ГОСТ TLS (на Linux -  Chromium GOST)

Открыть страницу в браузере, посмотреть сертификат, убедиться что алгоритм ГОСТ.

(12 плюсик(ов))
Класс!
Не очень :(