Назад | Перейти на главную страницу

Предупреждение об устаревании SSLCertificateChainFile на Apache 2.4.8+

У нас есть сертификат SSL для нашего веб-сайта от Network Solutions. После обновления Apache / OpenSSL до версии 2.4.9 при запуске HTTPD я получаю следующее предупреждение:

AH02559: The SSLCertificateChainFile directive (/etc/httpd/conf.d/ssl.conf:105) is deprecated, SSLCertificateFile should be used instead

Согласно Руководство Apache для mod_ssl Это действительно так:

SSLCertificateChainFile устарел

SSLCertificateChainFile стал устаревшим с версией 2.4.8, когда SSLCertificateFile был расширен для загрузки промежуточных сертификатов CA из файла сертификата сервера.

Поиск документации для SSLCertificateFile, похоже, мне просто нужно было перезвонить SSLCertificateChainFile с участием SSLCertificateFile.

Это изменение превратило мой ssl.conf из этого:

SSLCertificateFile /etc/ssl/STAR.EXAMPLE.COM.crt
SSLCertificateKeyFile /etc/ssl/server.key
SSLCertificateChainFile /etc/ssl/Apache_Plesk_Install.txt

к этому:

SSLCertificateFile /etc/ssl/STAR.EXAMPLE.COM.crt
SSLCertificateFile /etc/ssl/Apache_Plesk_Install.txt
SSLCertificateKeyFile /etc/ssl/server.key

... но это не работает. Apache просто отказывается запускаться без сообщения об ошибке.

Я не уверен, что еще здесь попробовать, так как я не очень хорошо знаком с mod_ssl или SSL-сертификатами в целом. Я помню, что нам нужно было добавить Apache_Plesk_Install.txt файл для Internet Explorer, чтобы на нашем сайте не отображалось предупреждение SSL, но кроме этого я понятия не имею.

Любая помощь будет принята с благодарностью. Спасибо.

Я была такая же проблема. Я просто заменил эти строки на /etc/apache2/site-enabled/default-ssl.conf

SSLCertificateFile    /etc/ssl/certs/domain.crt
SSLCertificateKeyFile /etc/ssl/private/domain.key
#SSLCertificateChainFile /etc/apache2/ssl.crt/chain.crt

Как видите, я просто закомментировал SSLCertificateChainFile. Затем, увидев ту же ошибку, что и вы, я объединил содержимое моего chain.crt в конце из domain.crt, вот так:

root@host~: cat /etc/apache2/ssl.crt/chain.crt >> /etc/ssl/certs/domain.crt

И это сработало как шарм.

Я использую следующий сценарий для создания пакета сертификатов, который содержит связанный сертификат.

#!/bin/sh
#
# Convert PEM Certificate to ca-bundle.crt format
#

test ! $1 && printf "Usage: `basename $0` certificate" && exit 1

# Friendly Name and Underline Friendly Name with equal signs
openssl x509 -in $1 -text -noout | sed -e 's/^  *Subject:.*CN=\([^,]*\).*/\1/p;t  c' -e 'd;:c' -e 's/./=/g'
# Output Fingerprint and swap = for :
openssl x509 -in $1 -noout -fingerprint | sed -e 's/=/: /'
# Output PEM Data:
echo 'PEM Data:'
# Output Certificate
openssl x509 -in $1
# Output Certificate text swapping Certificate with Certificate Ingredients
openssl x509 -in $1 -text -noout | sed -e 's/^Certificate:/Certificate Ingredients:/'

Чтобы использовать его, начиная с сертификата сервера и последовательно через любые промежуточные сертификаты в цепочке сертификатов обратно к корневому сертификату.

./bundle.sh myserver.crt >myserver.chain
./bundle.sh intermediate.crt >>myserver.chain
./bundle.sh root.crt >>myserver.chain

где соответствующие имена сертификатов заменяются вашим настоящим именем сертификата.

Если сертификат сайта, а также промежуточные звенья в файле, указанном в директиве SSLCertificateFile, и закрытый ключ объединены в файл, указанный в SSLCertificateKeyFile, все будет готово. Хотя у вас может быть закрытый ключ в том же файле, что и сертификаты, но это не рекомендуется. Пожалуйста, проверьте документацию для получения более подробной информации:
http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslcertificatefile
Я бы порекомендовал, чтобы корневой сертификат CA не был частью SSLCertificateFile, поскольку клиент должен иметь сертификат корневого CA как доверенный, чтобы проверка сертификата работала должным образом.
Кроме того, если в журналах ошибок apache ничего нет, то можно добавить журнал ошибок с более высокой степенью детализации, как в http://httpd.apache.org/docs/current/mod/core.html#loglevel