Zrozumienie danych wyjściowych openssl s_client

14

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 -CApathpodana 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 -CAfilepowodzeniem 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 Trustsklepu 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?

jobu1324
źródło
2
Myślę, że błąd „samopodpisany certyfikat w łańcuchu certyfikatów” to czerwony śledź. Główny urząd certyfikacji jest zawsze samopodpisany, więc serwer, który zwróci pełny łańcuch certyfikatów, zawsze zwróci certyfikat z podpisem własnym. Więcej informacji tutaj .
bennettp123
2
Wygląda na to, że openssl s_clientdomyślnie nie importuje żadnych certyfikatów root. Spróbuj zamiast tego: openssl s_client -connect secure.emailsrvr.com:995 -showcerts -CApath /etc/ssl/certsi prawdopodobnie okaże się, że błąd z podpisem własnym znika.
bennettp123
@ bennettp123 Zwracam uwagę na wynik tego polecenia w dolnej części pytania. Czy mam rację, rozumiejąc dane wyjściowe obu wersji polecenia, aby oznaczać, że certyfikat jest ważny?
jobu1324
tak, zgodnie z tym wyjściem, openssl uważa, że ​​certyfikat jest ważny. Dlaczego jest odrzucany? Nie wiem Być może dlatego, że pole Organizacja nie jest ustawione, ale to tylko przypuszczenie.
bennettp123 18.04.2014

Odpowiedzi:

5

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.

Mathias R. Jessen
źródło
Dlatego dwa łańcuchy serwerów są różne, a jednocześnie oba są prawidłowe. Ale niekoniecznie jest to przyczyną problemu OP z klientem mono, bez wyraźnych danych na temat tego, które katalogi główne są i nie są zainstalowane w magazynie zaufanych instancji mono.
dave_thompson_085
0

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/certsktó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 ...

openssl x509 -in Equifax_Secure_Certificate_Authority.pem -fingerprint -subject -issuer -serial -hash -noout | sed  -n /^[0-9]/p

https://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.pem

chetangb
źródło
Czy możesz rozszerzyć zakres swoich działań z połączonym plikiem pem?
sebix,
# ldd / usr / bin / fetchmail | grep ssl libssl.so.10 => /lib64/libssl.so.10
chetangb
co czytałem kiedyś z powrotem jest fetchmail zastosowania openssl bibliotekami i wygląda tylko przez wartość mieszania z cert productforums.google.com/forum/#!topic/gmail/tqjOmqxpMKY # ldd / usr / bin / fetchmail | grep ssl libssl.so.10 => /lib64/libssl.so.10 mniam co zapewnia libssl.so.10 openssl-libs-1.0.1e-42.el7.i686: Biblioteka kryptografii ogólnego zastosowania z implementacją TLS Repo: podstawowa Dopasowana from: Zapewnia: libssl.so.10
chetangb
Proszę udzielić odpowiedzi i wyjaśnić, na czym polega problem, który chcesz osiągnąć.
sebix,
0

Podczas generowania i konfigurowania certyfikatów należy również zaktualizować openssl.cnfplik (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 -CApathopcji.

W związku z tym zdalni gospodarze również mogą w tym przypadku poprawnie sprawdzić twoje certyfikaty.

Oto odpowiednia openssl.cnfsekcja:

####################################################################
[ ca ]

default_ca  = CA_default        # The default ca section

####################################################################
[ CA_default ]

dir     = /etc/ssl  
użytkownik155270
źródło
1
Jest źle . default_caDane 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łędu s_clientnie używa domyślnej (poprawki zaplanowanej na kwiecień 2015 r.), Której (2) ten OP i tak nie chciał zmienić.
dave_thompson_085