Попробуйте openssl s_client и позвольте вам показать сертификаты. Команда:
$ openssl s_client -connect co2avatar.org:443 -имя_сервера co2avatar.org -showcerts
Вы обнаружите, что ваш сервер возвращает сертификат для CN = gitlab.sustainable-data-platform.org
и альтернативное имя субъекта, которое включает ваш домен DNS: co2-avatar.com
. Так что с сертификатом все в порядке.
Если вы хотите объединить все в один конвейер команд, чтобы увидеть содержимое вашего сертификата:
эхо | openssl s_client -connect co2avatar.org:443 -servername co2avatar.org -showcerts 2>/dev/null |sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -noout -текст
Чего не хватает, так это промежуточного сертификата. Это также должно быть отправлено сервером, но первая команда показывает, что его там нет - ваш сервер отправляет только сертификат.
Таким образом, ошибка openssl верна, так как действительно отсутствует промежуточный сертификат.
Поэтому, чтобы решить эту проблему, вам нужно настроить конфигурацию Apache. Вот как может выглядеть ваша конфигурация:
Имя файла должно быть похоже на /etc/apache2/sites-enabled/co2-avatar.com-le-ssl.conf
<IfModule mod_ssl.c>
SSLStaplingCache shmcb:/var/run/apache2/stapling_cache(128000)
<VirtualHost *:443>
ServerName co2-avatar.com
ServerAlias www.co2-avatar.com
#...
#... insert your other stuff here...
#...
SSLCertificateFile /etc/letsencrypt/live/co2-avatar.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/co2-avatar.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLUseStapling on
</VirtualHost>
</IfModule>
Основываясь на вашем описании, я думаю, что следующая строка неверна в вашей конфигурации:
SSLCertificateFile /etc/letsencrypt/live/co2-avatar.com/cert.pem
. Его следует заменить на SSLCertificateFile /etc/letsencrypt/live/co2-avatar.com/fullchain.pem
, чтобы отправить также промежуточные звенья.
ОБНОВЛЕНИЕ решения (после обсуждения)
В ходе обсуждения выяснилось, что версия openssl и Apache, используемая на этом сервере CentOS, просто устарела, поэтому некоторые функции не поддерживаются. (Apache 2.4.6, OpenSSL 1.0.2k, промежуточная конфигурация, без HSTS, без OCSP)
Согласно с Генератор SSL-конфигураций Mozilla в этом случае можно использовать следующую общую конфигурацию:
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /path/to/signed_certificate
SSLCertificateChainFile /path/to/intermediate_certificate
SSLCertificateKeyFile /path/to/private_key
</VirtualHost>
В переводе на этот конкретный случай результирующая рабочая конфигурация будет выглядеть следующим образом:
<VirtualHost *:443>
ServerName sustainable-data-platform.org
ServerAlias co2-avatar.com
ServerAlias ... <include all other SAN names here>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/co2-avatar.com/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/co2-avatar.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/co2-avatar.com/privkey.pem
</VirtualHost>
В качестве примечания для таких старых установок
Срок действия промежуточных и корневых сертификатов Cross-Signed Let’s Encrypt R3 и DST Root CA X3 истекает 29 сентября 2021 г. и 30 сентября 2021 г. соответственно. Таким образом, с 4 мая 2021 г. вновь выпущенные сертификаты используют более длинную цепочку с перекрестно подписанным ISRG Root X1 в качестве промежуточного сертификата.
К сожалению, из-за способа построения и проверки путей сертификатов не все реализации TLS могут успешно проверять перекрестную подпись. Это относится к OpenSSL 1.0.2. Следовательно, программы, работающие в RHEL/CentOS 7 и использующие OpenSSL, скорее всего, не смогут проверить новую цепочку сертификатов или установить соединение TLS. Обновление до более новых версий Openssl на таких платформах не так просто.
Есть несколько вариантов: либо обновить хранилище доверенных сертификатов (удалить корневой сертификат DST Root CA X3 — после его удаления влияние должно быть минимальным) на стороне клиента (или) изменить цепочку сертификатов на стороне сервера.
Для Nginx
Для Nginx есть только один параметр для указания файла сертификата. Вы должны использовать полная цепочка.pem
предоставленный certbot, чтобы заставить его работать правильно.
Правильная конфигурация в блоке сервера для данного виртуального хоста будет следующей:
сервер {
...
ssl_certificate /etc/letsencrypt/live/co2-avatar.com/fullchain.pem; -> заменил cert.pem на fullchain.pem
ssl_certificate_key /etc/letsencrypt/live/co2-avatar.com/privkey.pem;
}
использованная литература