Настройка центра сертификации на базе HQ-SRV

Задание:

  • Необходимо использовать отечественные алгоритмы шифрования
  • Сертификаты выдаются на 30 дней
  • Обеспечьте доверие сертификату для HQ-CLI
  • Выдайте сертификаты веб серверам
  • Перенастройте ранее настроенный реверсивный прокси nginx на протокол https
  • При обращении к веб серверам https://web.au-team.irpo и https://docker.au-team.irpo у браузера клиента не должно возникать предупреждений.

Вариант реализации:

HQ-SRV:

  • Установите пакет с поддержкой ГОСТ:
apt-get install -y openssl-gost-engine
  • Включите поддержку ГОСТ через control-скрипт:
control openssl-gost enabled
  • Создаём закрытый ключ с алгоритмом ГОСТ-2012 (ca.key):
openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:TCB -out ca.key
  • Создаём сертификат на 30 дней (ca.cer):
openssl req -new -x509 -md_gost12_256 -days 30 -key ca.key -out ca.cer 
    • Результат:

  • Проверка сертификата (ca.cer):

  • Создаём закрытые ключи по алгоритму ГОСТ веб-серверов:
    • для web.au-team.irpo:
openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:A -out web.au-team.irpo.key
    • для docker.au-team.irpo:
openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:A -out docker.au-team.irpo.key
  • Создаём запросы на подпись ранее созданном УЦ:
    • для web.au-team.irpo:
openssl req -new  -md_gost12_256 -key gost.example.com.key -out web.au-team.irpo.csr

    • для docker.au-team.irpo:
openssl req -new  -md_gost12_256 -key gost.example.com.key -out docker.au-team.irpo.csr

  • Подписываем запрос в ранее созданном УЦ:
    • для web.au-team.irpo:
openssl x509 -req -in web.au-team.irpo.csr -CA ca.cer -CAkey ca.key -CAcreateserial -out web.au-team.irpo.cer -days 30
    • для docker.au-team.irpo:
openssl x509 -req -in docker.au-team.irpo.csr -CA ca.cer -CAkey ca.key -CAcreateserial -out docker.au-team.irpo.cer -days 30
  • Результат:

ISP:

  • Разрешаем доступ по ssh для пользователя root, чтобы можно было передать необходимые файлы с HQ-SRV:
vim /etc/openssh/sshd_config
    • приводим PermitRootLogin к следующему виду:

  • Перезагружаем службу sshd для применения изменений:
systemctl restart sshd

HQ-SRV:

  • Передаём необходимые файлы на ISP:
scp web.au-team.irpo.key root@172.16.1.1:~/
scp web.au-team.irpo.cer root@172.16.1.1:~/
scp docker.au-team.irpo.key root@172.16.1.1:~/
scp docker.au-team.irpo.cer root@172.16.1.1:~/

ISP:

  • Проверить наличие файлов ключей и сертификатов:

  • Создаём каталог /etc/nginx/ssl и копируем туда файлы ключей и сертификатов:
mkdir /etc/nginx/ssl
cp web.au-team.irpo.* /etc/nginx/ssl
cp docker.au-team.irpo.* /etc/nginx/ssl
  • Перенастраиваем доступ по https для доступа к сайту web.au-team.irpo и docker.au-team.irpo в конфигурационном файле /etc/nginx/sites-available.d/default.conf:

vim /etc/nginx/sites-available.d/default.conf

  • Проверить наличие ошибок в конфигурационных файлах:
nginx -t
    • Результат:

  • Чтобы устранить подобную ошибку и чтобы nginx в результате успешно перезапустил свою службу, необходимо установить пакет с поддержкой ГОСТ:
apt-get install -y openssl-gost-engine
  • Включите поддержку ГОСТ через control-скрипт:
control openssl-gost enabled
  • Перепроверить наличие ошибок в конфигурационных файлах:

  • Перезапустить службу nginx:
systemctl restart nginx

HQ-SRV:

  • Передаём на HQ-CLI корневой сертификат УЦ (ca.cer):
scp ca.cer user@192.168.200.2:~/

HQ-CLI:

  • Проверить наличие переданного сертификата:

  • Для установки корневых сертификатов необходимо поместить файлы сертификатов в /etc/pki/ca-trust/source/anchors/ и обновить общесистемный список доверенных CA (из-под суперпользователя root):
cp /home/user/ca.cer /etc/pki/ca-trust/source/anchors/ && update-ca-trust
  • Проверить наличие сертификата в браузере:
    • Яндекс:

    • Chromiun:

  • При попытке подключиться к нашим веб-ресурсам будет возникать следующая ошибка:
    • Chromium:

    • Яндекс:

  • Решение: устанавливаем КриптоПро CSP:

  • Распаковать скаченный архив:

  • Из-под суперпользователя перейти в директорию с распакованным архивом:
cd /home/user/Загрузки/linux-amd64
  • Установите пакет cryptopro-preinstall:
apt-get install -y cryptopro-preinstall
  • Запустить скрипт установки:
./install_gui.sh

  • Можно запустить КриптоПРО SCP и проверить наличие нашего УЦ:

 

НО (проблемы в исходном коде приложения):

Описанное ниже — не является призывом к действию! Просто попытка дойти до истины (редактирование запущенного контейнера — ни к чему хорошему не приведёт!)

  • для подключения https://docker.au-team.irpo — возникают проблемы со стилями (именно при подключению по HTTPS):

    • если перейти в режим отладки (F12), то можно увидеть что файл стилей не может быть загружен (проблема на стороне исходного кода веб-приложения):

  • можем попытаться войти внутрь контейнера с нашим приложением на BR-SRV:
docker exec -it testapp ash

  • проблема кроется в файле app/site/site.html, а именно в строке:

    • если данную строку привести к следующему виду:

  • проблема с отсутствием стилей при доступе по HTTPS будет решена: