ГОСТ в TLS: сертификаты, согласование и диагностика¶
В НАЙС.ОС OpenSSL обеспечивает криптографический слой TLS. При использовании ГОСТ ключа и соответствующего сертификата сервер и клиент согласуют поддерживаемый криптографический профиль. Для успешного соединения обе стороны должны понимать алгоритмы подписи, обмена ключами и шифрования, а сертификат должен соответствовать имени и назначению сервиса.
1. Посмотреть криптографические возможности OpenSSL¶
openssl ciphers -v | grep -i gost
openssl list -signature-algorithms | grep -Ei 'gost|tc26'
openssl engine -t -c gost
TLS 1.2 и TLS 1.3 имеют разную модель криптографических наборов. Не путайте список openssl ciphers с возможностью согласования всех вариантов в произвольном приложении.
2. Подготовить учебный ключ и сертификат¶
Создайте server.key и server.crt по руководству PKI. Убедитесь, что SAN соответствует подключаемому имени, extendedKeyUsage допускает serverAuth, а открытый ключ сертификата соответствует закрытому.
3. Запустить TLS-сервер в лаборатории¶
Команда предназначена для учебного стенда и прослушивает указанный порт. Перед запуском убедитесь, что порт не доступен с недоверенной сети и правила iptables не раскрывают его наружу.
4. Проверить TLS-клиентом¶
Для полноценной проверки цепочки задайте доверенный учебный корень:
openssl s_client \
-connect 127.0.0.1:8443 \
-servername server.example \
-CAfile root.crt \
-verify_return_error -verify_hostname server.example
5. Что смотреть в протоколе¶
- Выбранную версию TLS и алгоритмы согласования.
- Наличие ГОСТ в реальном результате согласования, а не только в локальном списке алгоритмов.
- Цепочку сертификатов, срок действия, SAN и EKU.
- Проверку доверия к УЦ.
- Сообщения
unsupported signature algorithm,no shared cipher,certificate verify failed.
6. Границы совместимости¶
Поддержка алгоритма в библиотеке и его фактическое согласование в TLS — разные уровни. Для ГОСТ-TLS обе стороны должны использовать совместимые криптографические профили. Upstream gost-engine описывает исторические наборы ГОСТ для TLS и развитие Provider/TLS; отдельные профили требуют соответствующей интеграции с библиотекой OpenSSL.
7. Приложения Nginx и OpenVPN¶
Nginx и OpenVPN используют TLS, но управляются собственными конфигурациями. Ключ и сертификат должны быть доступны соответствующему процессу, а переговоры TLS — подтверждены журналом и тестовым подключением. В OpenVPN управляющий TLS-канал и канал данных используют разные параметры; см. OpenVPN с ГОСТ.
8. Как разбирать ошибки¶
openssl x509 -in server.crt -noout -subject -issuer -dates
openssl x509 -in server.crt -noout -text | grep -E 'DNS:|Key Usage|Signature Algorithm'
openssl verify -CAfile root.crt server.crt
Не устраняйте TLS-ошибки глобальным отключением проверки сертификатов или применением шифра NULL.