Commande OpenSSL pour vérifier si un serveur présente un certificat

j'essaie d'exécuter une commande openssl pour préciser ce que pourrait être le problème SSL en essayant d'envoyer un message sortant de notre système.

j'ai trouvé cette commande dans un autre sujet: en utilisant openssl pour obtenir le certificat à partir d'un serveur

openssl s_client -connect ip:port -prexit

la sortie de ces résultats en

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
---

cela signifie-t-il que le serveur ne présente aucun certificat? J'ai essayé d'autres systèmes sur un ip différente: port et ils présentent un certificat avec succès.

L'authentification mutuelle affecte-t-elle cette commande avec-prexit?

-- Update--

j'ai couru de nouveau la commande

openssl s_client -connect ip:port -prexit

et je reçois cette réponse maintenant

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
---

j'ai ajouté-ssl3 à la commande

openssl s_client -connect ip:port -prexit -ssl3

Réponse:

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)
---

cherche Également -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)
---
41
demandé sur Community 2014-06-27 21:13:27

3 réponses

Je déboguais un problème SSL aujourd'hui qui a abouti à la même erreur write:errno=104 . Finalement, j'ai découvert que la raison de ce comportement était que le serveur avait besoin de SNI ( servername TLS extensions) pour fonctionner correctement. En fournissant l'option -servername d'openssl, vous avez réussi à vous connecter:

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

Espérons que cette aide.

55
répondu piit79 2015-03-23 16:32:55
15841:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:
...
SSL handshake has read 0 bytes and written 121 bytes

c'est un échec de poignée de main. De l'autre côté ferme la connexion sans envoyer de données ("lire 0 octets"). Il se peut que L'autre partie ne parle pas du tout SSL. Mais j'ai vu des erreurs similaires sur L'implémentation cassée de SSL, qui ne comprennent pas la nouvelle version de SSL. Essayez si vous obtenez une connexion SSL en ajoutant -ssl3 à la ligne de commande de s_client.

7
répondu Steffen Ullrich 2014-06-27 18:38:22

dans mon cas, le certificat ssl n'était pas configuré pour tous les sites (seulement pour la version www vers laquelle la version non-www redirigée). J'utilise Laravel forge et le NGINX Boilerplate config

j'ai eu la config suivante pour mon site nginx:

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

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;
}

ainsi, après déplacement (découpage et collage) la partie suivante à le /etc/nginx/h5bp/directive-seulement/ssl.conf tout fonctionne comme prévu:

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

il ne suffit pas d'avoir les clés spécifié uniquement pour la version www même, si vous appelez seulement la www version directement!

1
répondu Alexander Taubenkorb 2014-10-23 18:39:00