Różnica między SSLCertificateFile i SSLCertificateChainFile?

35

Zwykle w przypadku hosta wirtualnego ssl jest konfigurowany zgodnie z następującymi dyrektywami:

Listen 443 

SSLCertificateFile /home/web/certs/domain1.public.crt
SSLCertificateKeyFile /home/web/certs/domain1.private.key
SSLCertificateChainFile /home/web/certs/domain1.intermediate.crt

Od: Czy ta konfiguracja będzie działać, jeśli chcesz włączyć protokół SSL dla pojedynczej domeny na serwerze z wieloma hostami vhost?

Jaka jest różnica między SSLCertificateFilei SSLCertificateChainFile? Klient kupił klucz CA od GoDaddy. Wygląda na to, że GoDaddy zapewnia tylko SSLCertificateFile(plik .crt) i SSLCertificateKeyFile (plik .key), a nie na SSLCertificateChainFile.

Czy mój ssl nadal będzie działać bez SSLCertificateChainFileokreślonej ścieżki?

Czy istnieje również ścieżka kanoniczna, w której należy umieścić te pliki?

chrisjlee
źródło
1
Najczęściej umieszcza widzę ludzi oddanie pliki cert w /etc/ssl, /usr/local/etc/ssllub w sslpodkatalogu specyficzne dla strony internetowej (np /home/www/example.com/datazostał następnie strona home/www/example.com/sslposiada certyfikatów).
Chris S

Odpowiedzi:

49

Ściśle mówiąc, nigdy nie potrzebujesz łańcucha, aby protokół SSL działał.

Co zawsze trzeba to SSLCertificateFilez SSLCertificateKeyFilezawierający poprawny klucz dla tego certyfikatu.

Problem polega na tym, że jeśli wszystko, co dajesz Apache, to certyfikat, to wszystko, co musisz dać łączącym się klientom, to certyfikat - który nie opowiada całej historii o tym certyfikacie SSL. Mówi: „Jestem podpisany przez kogoś, ale nie powiem ci o nich”.

Zwykle działa to dobrze, ponieważ większość systemów klienckich ma duży magazyn certyfikatów CA (zarówno root, jak i pośrednich), które może sprawdzić pod kątem pasujących relacji podpisywania w celu ustanowienia zaufania. Czasami jednak to nie działa; najczęściej napotykasz problem z klientem, który nie posiada certyfikatu dla pośredniego urzędu certyfikacji, który podpisał twój certyfikat.

Tam właśnie wchodzi łańcuch; pozwala Apache pokazać klientowi dokładnie, jak wygląda relacja zaufania, co może pomóc klientowi wypełnić puste pola między twoim certyfikatem, zaufanym rootem i półproduktem, o którym nie wiedzą. Łańcuch można włączyć do konfiguracji na jeden z dwóch sposobów:

  • Osadzony w tym samym pliku, który ustawiłeś dla swojego SSLCertificateFile, w nowych wierszach po certyfikacie serwera w kolejności (katalog główny powinien znajdować się na dole). Jeśli skonfigurujesz go w ten sposób, SSLCertificateChainFilewskaż dokładnie ten sam plik, co SSLCertificateFile.
  • W osobnym pliku skonfigurowanym w SSLCertificateChainFiledyrektywie; certyfikat CA, który wystawił certyfikat serwera, powinien znajdować się w pliku jako pierwszy, a następnie w katalogu głównym.

Sprawdź plik certyfikatu, który masz teraz - założę się, że nie zawiera on danych łańcucha. Co zwykle działa dobrze, ale ostatecznie spowoduje problem z niektórymi przeglądarkami.

Shane Madden
źródło
2
Myślę, że „zwykle działa dobrze” tak naprawdę nie ma już zastosowania do certyfikatów GoDaddy, jeśli półprodukt nie jest uwzględniony. Nie jestem nawet pewien, czy dotyczy to już facetów takich jak Verisign i Thawte, ponieważ przenieśli się, aby witryny były bardziej oddalone od tych podstawowych, które są zawarte w przeglądarce. Wyobrażam sobie, że ułatwia to wycofanie, ponieważ łatwiej jest zabijać półprodukty.
cjc
„Osadzone w pliku SSLCertificateFile”: Chciałem, aby to działało, ale wydaje się, że nie działa i nie jest wymienione w dokumentacji. Twój łańcuch musi być włożony SSLCertificateChainFile.
Steve Kehlet
@ SteveKehlet Masz rację, że nie jest to udokumentowane, ale w przeszłości działało z powodzeniem - jak sformatowałeś plik „wszystko w jednym”?
Shane Madden
1
@ SteveKehlet Właściwie masz rację, przypomniałem sobie źle; sposób, w jaki ustawiłem go dla jednego pliku, to mieć oba SSLCertificateFilei SSLCertificateChainFilewskazać ten sam połączony plik, który działa - zredagowałem moją odpowiedź, aby to poprawić.
Shane Madden
@ShaneMadden Beautiful! To działa! Dzięki bardzo za zrozumienie tego.
Steve Kehlet
4

W rzeczywistości GoDaddy oferuje łańcuch pośredni:

http://support.godaddy.com/help/5238

Oto więcej dyskusji.

http://support.godaddy.com/help/868/what-is-an-intermediate-certificate

Wiadomość e-mail od GoDaddy z informacją, jak pobrać nowy certyfikat, zawiera również informacje na temat pliku certyfikatu pośredniego. Jest gdzieś u dołu, być może po tym, jak twoje oczy błyszczą od verbage i sprzedają.

Jeśli chodzi o to, co się stanie, jeśli nie uwzględnisz właściwej dyrektywy SSLCertificateChainFile: zobaczysz duże czerwone ostrzeżenie w przeglądarce, ponieważ witryna SSL nie będzie sprawdzana w przeglądarkach, ponieważ nie mogą one podążać za łańcuchem certyfikatów z witryny certyfikat do jednego z ośrodków certyfikacji, o których wie przeglądarka.

cjc
źródło
2

Chciałbym dodać do poprzednich dobrych odpowiedzi na temat SSLCertificateChainFile, że kolejność certyfikatów w tym pliku jest również ważna. Klienci z OpenSSL sami uporządkują zamówienie, ale klienci z gnutls nie będą działać w łańcuchu z nieprawidłową kolejnością.

Przetestuj kolejność za pomocą gnutls-cli, like

gnutls-cli --x509cafile /etc/ssl/certs/ca-certificates.crt -p https wwwsec.cs.uu.nl

gdzie /etc/ssl/certs/ca-certificates.crt to lokalizacja, w której dystrybucja umieszcza połączone certyfikaty.

Koos van den Hout
źródło