Istnieje serwer z zepsutym łańcuchem SSL, zgodnie z tym sprawdzeniem protokołu SSL :
Wiem, że jest to problem, który powinien zostać rozwiązany na samym serwerze, ale czasem trudno go naprawić (nie jestem administratorem serwera).
Chodzi o to, że Chrome / Mozilla / Edge w systemie Windows i tak ufają certyfikatowi witryny :
Jednak we wdrożeniu Gnu / Linux (Ubuntu 18.04 w Docker) certyfikat nie jest zaufany:
curl: (60) SSL certificate problem: unable to get local issuer certificate
Próbowałem, update-ca-certificates
a nawet zaimportowałem certyfikat Globalsign Root. update-ca-certificates
w takim przypadku zgłosił duplikat certyfikatu. W każdym razie nic nie działa.
Jak się rozmnażać
Za pomocą Dockera:
docker run -it ubuntu:18.04
# within container:
apt-get update
apt-get -y install curl
curl https://betriebsheft.vog.it # <---- "unable to get local issuer certificate"
Jak sprawić, aby Gnu / Linux ufał temu certyfikatowi?
PS: Ten sam certyfikat jest poprawnie wdrożony na innym serwerze .
curl
openssl
ssl
certificates
Udo G.
źródło
źródło
Odpowiedzi:
Prawdziwą poprawką jest upewnienie się, że Twój serwer prezentuje wszystkie certyfikaty w łańcuchu, a nie tylko certyfikat encji końcowej (serwera).
Wskaż administratorowi serwera RFC 5246 sekcja 7.4.2, która wyraźnie stwierdza, że ten komunikat przekazuje łańcuch certyfikatów serwera do klienta.
Jeśli administrator z jakiegoś powodu odmawia / nie może tego zrobić, alternatywną opcją jest próba
curl
rozpoczęcia pracy z nieprawidłowo uściskiem dłoni.Zgodnie z wiadomością na liście mailingowej Curl:
Powinno być możliwe dodanie głównego pakietu CA i wszystkich certyfikatów pośrednich do pakietu i wskazanie
curl
go za pomocą--cacert <file>
opcji.Gdy przeglądarki działają, możesz uzyskać dostęp do odpowiednich certyfikatów CA. Na karcie certyfikatów (różnej dla każdej przeglądarki, ale jestem pewien, że ją znajdziesz), przejrzyj łańcuch certyfikatów. Dwukrotnie kliknij głównego urzędu pierwszy GlobalSign root CA - G1 i na szczegóły karcie, kliknij Kopiuj do pliku ... . Zapisz to jako
root.cer
. Zrób to samo z AlphaSSL CA - SHA256 - G2 i zapisz jakoissuing.cer
. Połącz oba razem w jednym pliku (np.chain.cer
) I użyj tego jako argumentu-cacert
.Jak uprzejmie zauważył @AB, brakujący certyfikat można również znaleźć tutaj .
Twoje przeglądarki działają, ponieważ buforują certyfikaty CA. Jeśli w przeszłości przeszedłeś do prawidłowo skonfigurowanej witryny, której certyfikat został wydany przez ten sam urząd certyfikacji, co certyfikat twojego serwera, zostanie ona buforowana przez przeglądarkę. Gdy następnie odwiedzisz niepoprawnie skonfigurowaną witrynę, przeglądarka użyje certyfikatów CA w pamięci podręcznej do zbudowania łańcucha. Wydaje ci się, że wszystko jest w porządku, chociaż za kulisami serwer jest źle skonfigurowany.
Pamiętaj, że w systemach Windows IE / Edge i Chrome współużytkują tę samą pamięć podręczną, podczas gdy Firefox używa własnej pamięci podręcznej.
Oprócz powyższego IE / Edge i Chrome (ponieważ współużytkują ten sam stos kryptograficzny) będą używać rozszerzenia w certyfikatach o nazwie AuthorityInformationAccess . Jest to opcja caIssuer , która zapewnia adres URL, z którego można pobrać certyfikat CA certyfikatu podmiotu końcowego. Dlatego nawet jeśli jedna z tych przeglądarek nie buforowała brakujących certyfikatów z poprzedniego przeglądania, może ją pobrać w razie potrzeby. Pamiętaj, że Firefox tego nie robi, dlatego czasami Firefox może wyświetlać błędy certyfikatów, gdy IE / Edge i Chrome wydają się działać.
źródło
--cacert cacert.pem
ale CURL nadal nie akceptuje certyfikatu.echo q | openssl s_client -showcerts -connect betriebsheft.vog.it:443
a zobaczysz tylko jeden certyfikat prezentowany przez serwer. Powinny istnieć dwa - certyfikat podmiotu końcowego (który jest prezentowany) i wydający CA - certyfikat Alpha SSL - SHA256 - G2. Ten ostatni nie jest wysyłany przez serwer, ale powinien.