После настройки сертификата национального стандарта шифрования Nginx при запуске сообщает об ошибке SSL_CTX_use_certificate failed. Как это исправить?
Причина ошибки
Это происходит потому, что используемая в промежуточном ПО базовая библиотека OpenSSL не поддерживает алгоритмы национального стандарта шифрования (SM2/SM3/SM4).
Стандартный OpenSSL не распознаёт формат сертификатов национального стандарта, что приводит к сбою загрузки сертификата.
Решение
Необходимо скомпилировать и установить версию OpenSSL с поддержкой национального стандарта шифрования (например, GmSSL, Tongsuo и другие ветки OpenSSL, поддерживающие национальные алгоритмы), а затем пересобрать Nginx с использованием этой версии, чтобы он поддерживал загрузку таких сертификатов.
Порядок действий (кратко):
- Загрузите и скомпилируйте OpenSSL с поддержкой национального стандарта (рекомендуется: Tongsuo)
- Пересоберите Nginx с использованием OpenSSL с поддержкой национального стандарта (
--with-openssl=...указывает на версию с поддержкой национального стандарта) - Настройте в Nginx двойной сертификат (сертификат национального стандарта + RSA-сертификат), чтобы обеспечить совместимость во всех сценариях