2014-06-27 7 views
32

Próbuję uruchomić komendę openssl, aby zawęzić problem związany z SSL podczas próby wysłania komunikatu wychodzącego z naszego systemu.Komenda OpenSSL, aby sprawdzić, czy serwer prezentuje certyfikat

znalazłem tego polecenia w innym temacie: Using openssl to get the certificate from a server

openssl s_client -connect ip:port -prexit 

Wyjście Powoduje

CONNECTED(00000003) 
15841:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188: 
--- 
no peer certificate available 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 0 bytes and written 121 bytes 
--- 
New, (NONE), Cipher is (NONE) 
Secure Renegotiation IS NOT supported 
Compression: NONE 
Expansion: NONE 
--- 

Czy oznacza to, że serwer nie prezentuje żadnego certyfikatu? Próbowałem innych systemów na innym porcie ip: i pomyślnie prezentują certyfikat.

Czy uwierzytelnianie wzajemne wpływa na to polecenie za pomocą opcji -prexit?

--Update--

Pobiegłem ponownie komendę

openssl s_client -connect ip:port -prexit 

I dostać tę odpowiedź teraz

CONNECTED(00000003) 
write:errno=104 
--- 
no peer certificate available 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 0 bytes and written 121 bytes 
--- 
New, (NONE), Cipher is (NONE) 
Secure Renegotiation IS NOT supported 
Compression: NONE 
Expansion: NONE 
--- 

dodałem -ssl3 do polecenia

openssl s_client -connect ip:port -prexit -ssl3 

Odpowiedź:

CONNECTED(00000003) 
write:errno=104 
--- 
no peer certificate available 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 0 bytes and written 0 bytes 
--- 
New, (NONE), Cipher is (NONE) 
Secure Renegotiation IS NOT supported 
Compression: NONE 
Expansion: NONE 
SSL-Session: 
    Protocol : SSLv3 
    Cipher : 0000 
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg : None 
    Krb5 Principal: None 
    Start Time: 1403907236 
    Timeout : 7200 (sec) 
    Verify return code: 0 (ok) 
--- 

również stara -tls1

CONNECTED(00000003) 
write:errno=104 
--- 
no peer certificate available 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 0 bytes and written 0 bytes 
--- 
New, (NONE), Cipher is (NONE) 
Secure Renegotiation IS NOT supported 
Compression: NONE 
Expansion: NONE 
SSL-Session: 
    Protocol : TLSv1 
    Cipher : 0000 
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg : None 
    Krb5 Principal: None 
    Start Time: 1403907267 
    Timeout : 7200 (sec) 
    Verify return code: 0 (ok) 
--- 
+1

Czy możemy przenieść to do administratora? Samo pytanie okazało się pomocne, ponieważ już stanowi obejście tego problemu. – dannyman

+0

Upewnij się, że korzystasz z certyfikatu APN, a nie certyfikatu programistycznego ios. – Dharmik

Odpowiedz

5
15841:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188: 
... 
SSL handshake has read 0 bytes and written 121 bytes 

To niepowodzenie handshake. Druga strona zamyka połączenie bez wysyłania jakichkolwiek danych ("odczyt 0 bajtów"). Możliwe, że druga strona w ogóle nie używa SSL. Ale widziałem podobne błędy na błędnej implementacji SSL, które nie rozumieją nowszej wersji SSL. Spróbuj, jeśli uzyskasz połączenie SSL, dodając -ssl3 do linii poleceń s_client.

+0

W przypadku starszej implementacji pomocna może być opcja '-ssl3'. I odwrotnie, jeśli jest to nowsza implementacja, może pomóc opcja 'tls1_2'. Ale zapewniam, że najpierw jest serwer SSL/TLS w tym IP/Port. – jww

+2

@jww: jeśli nie określisz protokołu z s_client, spróbuje zrobić wszystko co możliwe, więc nie powinno być potrzeby wymuszania na nim używania nowszej wersji. Ale widziałem kilka hostów, które właśnie zamykają połączenie, jeśli klient pyta o TLS 1.1, a nawet TLS 1.0, ponieważ tylko oni mogą zrozumieć SSL 3.0. –

+0

Dzięki za pomoc! Sprawdzę z serwerem (punktem końcowym) czy poprawnie implementują SSL na serwerze –

1

W moim przypadku certyfikat ssl nie był skonfigurowany dla wszystkich witryn (tylko dla wersji www, do której przekierowano wersję inną niż www). Używam laravel wykuć i Nginx Boilerplate config

miałem następujące config dla mojej stronie nginx:

/etc/nginx/sites-available/timtimer.at

server { 
    listen [::]:80; 
    listen 80; 
    server_name timtimer.at www.timtimer.at; 

    include h5bp/directive-only/ssl.conf; 

    # and redirect to the https host (declared below) 
    # avoiding http://www -> https://www -> https:// chain. 
    return 301 https://www.timtimer.at$request_uri; 
} 

server { 
    listen [::]:443 ssl spdy; 
    listen 443 ssl spdy; 

    # listen on the wrong host 
    server_name timtimer.at; 

    ### ERROR IS HERE ### 
    # You eighter have to include the .crt and .key here also (like below) 
    # or include it in the below included ssl.conf like suggested by H5BP 

    include h5bp/directive-only/ssl.conf; 

    # and redirect to the www host (declared below) 
    return 301 https://www.timtimer.at$request_uri; 
} 

server { 
    listen [::]:443 ssl spdy; 
    listen 443 ssl spdy; 

    server_name www.timtimer.at; 

    include h5bp/directive-only/ssl.conf; 

    # Path for static files 
    root /home/forge/default/public; 

    # FORGE SSL (DO NOT REMOVE!) 
    ssl_certificate /etc/nginx/ssl/default/2658/server.crt; 
    ssl_certificate_key /etc/nginx/ssl/default/2658/server.key; 

    # ... 

    # Include the basic h5bp config set 
    include h5bp/basic.conf; 
} 

Więc po przeprowadzce (cięcie & wklejanie) dodaje się część do /etc/nginx/h5bp/directive-only/ssl.conf plików wszystko działało zgodnie z oczekiwaniami:

# FORGE SSL (DO NOT REMOVE!) 
ssl_certificate /etc/nginx/ssl/default/2658/server.crt; 
ssl_certificate_key /etc/nginx/ssl/default/2658/server.key; 

Nie wystarczy mieć kluczy określonych tylko dla wersji www, jeśli tylko dzwonisz bezpośrednio do wersji www!

43

Właśnie debugowałem problem z SSL, który spowodował ten sam błąd write:errno=104.W końcu dowiedziałem się, że powodem tego zachowania było to, że serwer wymagał rozszerzenia SNI (servername TLS), aby działały poprawnie. Zaopatrywanie opcję OpenSSL -servername sprawiły, że nawiązane:

openssl s_client -connect domain.tld:443 -servername domain.tld 

nadzieję, że to pomaga.

+0

dzięki! to był klucz do mnie – cwd

+0

Dzięki, z twojej odpowiedzi otrzymałem podpowiedź, żeby naprawić serwer. – shantanu

+0

@shantanu: Czy możesz zaktualizować poprawkę dla tego. Będzie pomocny. – user2025329

Powiązane problemy