Odkąd nasz dostawca poczty e-mail zmienił certyfikat SSL, klient POP3 oparty na mono odmawia połączenia z bezpiecznym serwerem POP w celu pobrania wiadomości e-mail. Inni klienci nie mają problemu; np. Thunderbird i Outlook; podobnie jak większość witryn sprawdzających SSL, które są w stanie sprawdzać nieparzyste porty, z wyjątkiem tego . Pracowałem z oboma dostawcami, aby wskazać problem, ale w końcu osiągnąłem koniec z obojgiem, ponieważ nie wiem wystarczająco dużo o certyfikatach SSL, aby pomóc każdemu z dostawców zrozumieć, gdzie leży wina.
Podczas dochodzenia zwróciłem uwagę na różnicę w wynikach następujących dwóch poleceń (usunąłem certyfikaty z danych wyjściowych ze względu na czytelność):
echo "" | openssl s_client -showcerts -connect pop.gmail.com:995
POŁĄCZONY (00000003) głębokość = 2 / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA sprawdź błąd: num = 20: nie można uzyskać certyfikatu lokalnego wystawcy sprawdź zwrot: 0 --- Łańcuch certyfikatów 0 s: / C = US / ST = California / L = Mountain View / O = Google Inc / CN = pop.gmail.com i: / C = US / O = Google Inc / CN = Google Internet Authority G2 ----- ROZPOCZNIJ CERTYFIKAT ----- ----- CERTYFIKAT KOŃCOWY ----- 1 s: / C = US / O = Google Inc / CN = Google Internet Authority G2 i: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA ----- ROZPOCZNIJ CERTYFIKAT ----- ----- CERTYFIKAT KOŃCOWY ----- 2 s: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA i: / C = US / O = Equifax / OU = Equifax Secure Certificate Authority ----- ROZPOCZNIJ CERTYFIKAT ----- ----- CERTYFIKAT KOŃCOWY ----- --- Certyfikat serwera subject = / C = US / ST = Kalifornia / L = Mountain View / O = Google Inc / CN = pop.gmail.com emitent = / C = US / O = Google Inc / CN = Google Internet Authority G2 --- Nie wysłano żadnych nazw certyfikatów klienta --- Uzgadnianie SSL odczytało 3236 bajtów i zapisało 435 bajtów --- Nowy, TLSv1 / SSLv3, Szyfr to RC4-SHA Klucz publiczny serwera to 2048 bitów Obsługiwana jest bezpieczna renegocjacja Kompresja: BRAK Rozszerzenie: BRAK Sesja SSL: Protokół: TLSv1 Szyfr: RC4-SHA ID sesji: 745F84194498529B91B7D9194363CBBD23425446CF2BFF3BF5557E3C6606CA06 Session-ID-ctx: Klucz główny: DED1AE0A44609F9D6F54626F4370ED96436A561A59F64D66240A277066322DCD2CCB9A6D198C95F4D2B0C7E6781EECD2 Key-Arg: Brak Czas rozpoczęcia: 1397678434 Limit czasu: 300 (s) Zweryfikuj kod powrotu: 20 (nie można uzyskać certyfikatu lokalnego wystawcy) --- + OK Gpop jest gotowy na żądania od 69.3.61.10 c13mb42148040pdj GOTOWY
echo "" | openssl s_client -showcerts -connect secure.emailsrvr.com:995
POŁĄCZONY (00000003) głębokość = 2 / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA sprawdź błąd: num = 19: samopodpisany certyfikat w łańcuchu certyfikatów sprawdź zwrot: 0 --- Łańcuch certyfikatów 0 s: / serialNumber = tG0GnsyAUkdX7DEo15ylNBjQJqAWZ / dD / OU = 4159320284 / OU = Patrz www.rapidssl.com/resources/cps (c) 14 / OU = Kontrola domeny sprawdzona - RapidSSL (R) /CN=secure.emailsrvr.com i: / C = US / O = GeoTrust, Inc./CN=RapidSSL CA ----- ROZPOCZNIJ CERTYFIKAT ----- ----- CERTYFIKAT KOŃCOWY ----- 1 s: / C = US / O = GeoTrust, Inc./CN=RapidSSL CA i: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA ----- ROZPOCZNIJ CERTYFIKAT ----- ----- CERTYFIKAT KOŃCOWY ----- 2 s: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA i: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA ----- ROZPOCZNIJ CERTYFIKAT ----- ----- CERTYFIKAT KOŃCOWY ----- --- Certyfikat serwera subject = / serialNumber = tG0GnsyAUkdX7DEo15ylNBjQJqAWZ / dD / OU = 4159320284 / OU = Patrz www.rapidssl.com/resources/cps (c) 14 / OU = Kontrola domeny potwierdzona - RapidSSL (R) /CN=secure.emailsrvr.com emitent = / C = US / O = GeoTrust, Inc./CN=RapidSSL CA --- Nie wysłano żadnych nazw certyfikatów klienta --- Uzgadnianie SSL odczytało 3876 bajtów i zapisało 319 bajtów --- Nowy, TLSv1 / SSLv3, szyfr to DHE-RSA-AES256-SHA Klucz publiczny serwera to 2048 bitów Obsługiwana jest bezpieczna renegocjacja Kompresja: BRAK Rozszerzenie: BRAK Sesja SSL: Protokół: TLSv1 Szyfr: DHE-RSA-AES256-SHA ID sesji: 3F4EE3992B46727BE2C7C3E76A9A6A8D64D66EE843CB1BB17A76AE2E030C7161 Session-ID-ctx: Klucz główny: 016209E50432EFE2359DB73AB527AF718152BFE6F88215A9CE40604E8FF2E2A3AC97A175F46DF737596866A8BC8E3F7F Key-Arg: Brak Czas rozpoczęcia: 1397678467 Limit czasu: 300 (s) Zweryfikuj kod powrotu: 19 (samopodpisany certyfikat w łańcuchu certyfikatów) --- GOTOWY
Próbowałem zrozumieć, czy ma to sens, ponieważ gdy -CApath
podana jest opcja, polecenia nie powodują żadnych błędów:
openssl s_client -CApath /etc/ssl/certs -showcerts -connect secure.emailsrvr.com:995
CONNECTED(00000003)
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = "GeoTrust, Inc.", CN = RapidSSL CA
verify return:1
depth=0 serialNumber = tG0GnsyAUkdX7DEo15ylNBjQJqAWZ/dD, OU = 4159320284, OU = See www.rapidssl.com/resources/cps (c)14, OU = Domain Control Validated - RapidSSL(R), CN = secure.emailsrvr.com
verify return:1
...
openssl s_client -CApath /etc/ssl/certs -showcerts -connect pop.gmail.com:995
CONNECTED(00000003)
depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority
verify return:1
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = pop.gmail.com
verify return:1
...
Mogę również z -CAfile
powodzeniem korzystać z tej opcji po pobraniu certyfikatu CAfile bezpośrednio z GeoTrust.
Niemniej jednak Fog Creek wydaje się uważać, że problem leży po stronie certyfikatu, ponieważ próbowali dodać certyfikat do Trust
sklepu mono bez powodzenia. Nie zgadzam się z nimi, ale (jak wspomniano powyżej), podczas gdy większość programów sprawdzających SSL albo nie sprawdza portu 995, albo nie udaje się podczas próby, znalazłem tę stronę, która powoduje błąd SSL 7.
Czy poprawnie interpretuję dane wyjściowe, aby oznaczać, że nie ma nic złego w certyfikacie?
źródło
openssl s_client
domyślnie nie importuje żadnych certyfikatów root. Spróbuj zamiast tego:openssl s_client -connect secure.emailsrvr.com:995 -showcerts -CApath /etc/ssl/certs
i prawdopodobnie okaże się, że błąd z podpisem własnym znika.Odpowiedzi:
Odpowiedź (jak wyjaśniono w tym poście security.SE ) jest taka, że dwa certyfikaty GeoTrust Global CA, które widzisz w łańcuchu, w rzeczywistości nie są tym samym certyfikatem , jeden pochodzi od drugiego.
Z powodu podpisywania krzyżowego przez CA!
Kiedy certyfikat GeoTrust Global CA został utworzony i podpisany po raz pierwszy, żaden komputer / przeglądarki / aplikacje nie miałby go w swoim magazynie zaufania.
Po podpisaniu certyfikatu głównego urzędu certyfikacji GeoTrust przez inny urząd certyfikacji (z istniejącą reputacją i dystrybucją) uzyskany certyfikat (nazywany certyfikatem „pomostowym”) można teraz zweryfikować przez drugi urząd certyfikacji, bez konieczności posiadania certyfikatu głównego urzędu certyfikacji GeoTrust do bezpośredniego zaufania klienta.
Gdy Google przedstawia podpisaną krzyżowo wersję certyfikatu głównego urzędu certyfikacji GeoTrust, klient, który nie ufa oryginałowi, może po prostu użyć certyfikatu Equifax CA do weryfikacji GeoTrust - więc Equifax działa jak swoista „starsza” kotwica zaufania.
źródło
Miałem podobny problem z fetchmailem, kiedy włączyłem sprawdzanie ssl dla
pop.gmail.com
.Pobrałem plik pem Equifax, ale nie działał tak, jak jest, musiałem uruchomić,
c_rehash ssl/certs
który utworzył dowiązanie symboliczne z wartością skrótu, po prostu działało.Alternatywnie wartość skrótu można również poznać, uruchamiając ...
https://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.pem
źródło
Podczas generowania i konfigurowania certyfikatów należy również zaktualizować
openssl.cnf
plik (Debian -/etc/ssl/openssl.cnf
), aby wskazać odpowiednią ścieżkę, nazwy certyfikatów itp., A następnie można uruchomić polecenie i sprawdzić je bez-CApath
opcji.W związku z tym zdalni gospodarze również mogą w tym przypadku poprawnie sprawdzić twoje certyfikaty.
Oto odpowiednia
openssl.cnf
sekcja:źródło
default_ca
Dane w (any) openssl config plik jest wykorzystywany jedynie dla „Ca” narzędzie do wystawiania i ewentualnie odwołać CERT, nigdy do weryfikacji. Metodą zmiany domyślnego magazynu weryfikacji (oprócz ponownej kompilacji) są zmienne środowiskowe SSL_CERT_ {FILE, DIR}. Jednak (1) z powodu błędus_client
nie używa domyślnej (poprawki zaplanowanej na kwiecień 2015 r.), Której (2) ten OP i tak nie chciał zmienić.