У нас есть сертификат 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