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