SSLCertificateChainFile Ostrzeżenie o wycofaniu w Apache 2.4.8+

14

Posiadamy certyfikat SSL na naszą stronę internetową od Network Solutions. Po uaktualnieniu Apache / OpenSSL do wersji 2.4.9, teraz pojawia się następujące ostrzeżenie podczas uruchamiania HTTPD:

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

Zgodnie z instrukcją Apache dla mod_ssl tak właśnie jest:

SSLCertificateChainFile jest przestarzały

SSLCertificateChainFile stał się przestarzały w wersji 2.4.8, kiedy SSLCertificateFile został rozszerzony, aby ładować również pośrednie certyfikaty CA z pliku certyfikatu serwera.

Przeglądając dokumentację dla SSLCertificateFile , wyglądało na to, że po prostu potrzebuję zastąpić moje wywołanie SSLCertificateChainFile przez SSLCertificateFile .

Ta zmiana zmieniła mój ssl.conf z tego:

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

do tego:

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

... ale to nie działa. Apache po prostu odmawia uruchomienia bez komunikatu o błędzie.

Nie jestem pewien, co jeszcze tu spróbować, ponieważ nie znam się na certyfikatach mod_ssl ani SSL w ogóle. Pamiętam, że potrzebowaliśmy dodać plik Apache_Plesk_Install.txt , aby program Internet Explorer nie wyświetlał ostrzeżenia SSL w naszej witrynie, ale poza tym nie mam pojęcia.

Każda pomoc byłaby bardzo mile widziana. Dzięki.

DOOManiac
źródło
6
Musisz połączyć wszystkie certyfikaty, certyfikat klienta i certyfikaty pośrednie
dawud

Odpowiedzi:

9

Miałem ten sam problem. Właśnie wymieniłem te linie/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

Jak widzisz, właśnie skomentowałem SSLCertificateChainFile. Następnie, widząc ten sam błąd co ty, połączyłem treść mojego chain.crt na końcu, w ten domain.crtsposób:

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

I działało jak urok.

użytkownik306141
źródło
doskonale poprawny również zgodnie z komentarzami w konfiguracji apache: „Alternatywnie # plik odniesienia może być taki sam jak SSLCertificateFile #, gdy certyfikaty CA są dla wygody bezpośrednio dołączane do certyfikatu serwera.”
PeanutPower,
6

Używam następującego skryptu, aby utworzyć pakiet certyfikatów, który zawiera łańcuchowy certyfikat.

#!/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:/'

Aby z niego skorzystać, zaczynając od certyfikatu serwera i kolejno przez dowolne certyfikaty pośrednie w łańcuchu certyfikatów z powrotem do certyfikatu głównego.

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

gdzie odpowiednie nazwy certyfikatów są zastępowane rzeczywistą nazwą certyfikatu.

sweetfa
źródło
4

Miej certyfikat witryny, produkty pośrednie również w pliku określonym przez dyrektywę SSLCertificateFile, a klucz prywatny połączony w pliku określonym przez SSLCertificateKeyFile, a wszystko powinno być ustawione. Chociaż możesz mieć klucz prywatny w tym samym pliku co certyfikaty, ale jest to odradzane. Więcej informacji można znaleźć w dokumentacji:
http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslcertificatefile
Polecam, aby certyfikat głównego urzędu certyfikacji nie był częścią pliku SSLCertificateFile, ponieważ klient powinien mieć główny certyfikat CA jako zaufany, aby sprawdzanie poprawności certyfikatu działało zgodnie z planem.
Ponadto, jeśli nie ma nic w dziennikach błędów apache, można ustawić dziennik błędów na bardziej szczegółową jak whttp://httpd.apache.org/docs/current/mod/core.html#loglevel

Khanna111
źródło
1
Naprawdę? Klucz prywatny? To wydaje się złym pomysłem. Zastanawiam tylko, ponieważ moim mocnym założeniem jest to, że jest to sprawa prywatna.
ssl
2
Masz rację - zmieniło się to, co zapamiętałem z dokumentacji, a także jaka dokumentacja istnieje w pliku httpd-ssl.conf dla tych dwóch dyrektyw. Chociaż dozwolone, ale odradza się praktykę posiadania klucza prywatnego w pliku określonym przez SSLCertificateFile. Odpowiedź jest teraz edytowana, aby uwzględnić ten fakt.
Khanna111,