web-dev-qa-db-fra.com

Impossible d'établir une connexion SSL, comment puis-je réparer mon certificat SSL?

J'essaie de wget à ma propre boîte, et ce ne peut pas être une adresse interne dans le wget (ainsi dit un autre développeur).

Quand je wget, je reçois ceci:

wget http://example.com
--2013-03-01 15:03:30--  http://example.com/
Resolving example.com... 172.20.0.224
Connecting to example.com|172.20.0.224|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://www.example.com/ [following]
--2013-03-01 15:03:30--  https://www.example.com/
Resolving www.example.com... 172.20.0.224
Connecting to www.example.com|172.20.0.224|:443... connected.
OpenSSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Unable to establish SSL connection.

Je pense que c’est parce que je n’ai pas correctement configuré le certificat. Utiliser openssl:

openssl s_client -connect example.com:443
CONNECTED(00000003)
15586:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:588:

Tandis que si je fais la même commande sur un autre site, il affiche l'intégralité du cert. 

Peut-être que le certificat SSL n'a jamais été configuré dans le fichier de configuration sur Apache pour ce domaine?

Si oui, que devrais-je spécifier dans le virtualhost? Existe-t-il une alternative autre que spécifier --no-check-certificate parce que je ne veux pas faire cela?

54
meder omuraliev

SSL23_GET_SERVER_HELLO: protocole inconnu

Cette erreur se produit lorsque OpenSSL reçoit autre chose qu'une ServerHello dans une version de protocole comprise du serveur. Cela peut arriver si le serveur répond avec un HTTP simple (non chiffré). Cela peut également arriver si le serveur ne prend en charge que, par exemple, TLS 1.2 et le client ne comprennent pas cette version du protocole. Normalement, les serveurs sont rétro-compatibles avec au moins SSL 3.0/TLS 1.0, mais peut-être que ce serveur spécifique ne l’est pas (par implémentation ou configuration).

Il est difficile de savoir si vous avez tenté de transmettre --no-check-certificate ou non. Je serais plutôt surpris si cela fonctionnerait.

Un simple test consiste à utiliser wget (ou un navigateur) pour demander http://example.com:443 (notez le http:// et non le https://); Si cela fonctionne, SSL n’est pas activé sur le port 443. Pour procéder au débogage, utilisez openssl s_client avec l’option -debug qui, juste avant le message d’erreur, vide les premiers octets de la réponse du serveur qu’OpenSSL n’a pas pu analyser. Cela peut aider à identifier le problème, surtout si le serveur ne répond pas avec un message ServerHello. Pour voir ce que OpenSSL attend exactement, vérifiez la source: recherchez SSL_R_UNKNOWN_PROTOCOL dans ssl/s23_clnt.c.

Dans tous les cas, consulter le journal des erreurs Apache peut également fournir des informations utiles.

84

Dans mon cas, je n'avais pas activé le site 'default-ssl'. Seul '000-default' était répertorié dans le dossier /etc/Apache2/sites-enabled.

Activer le site SSL sur Ubuntu 14 LTS, Apache 2.4.7:

a2ensite default-ssl
service Apache2 reload
18
angularsen

Juste une note rapide (et cause possible).

Vous pouvez avoir une configuration VirtualHost parfaitement correcte avec _default_:443 etc. dans votre fichier .conf Apache. 

But ... S'il existe même un fichier .conf activé avec des paramètres incorrects et qui écoute également le port 443, l'ensemble du système SSL sera alors mis hors service. 

Par conséquent, si vous êtes certain que votre fichier .conf est correct, essayez de désactiver les autres fichiers .conf du site dans sites-enabled.

9
Nostalg.io

Il y a quelques possibilités:

  1. Votre station de travail ne dispose pas du certificat d'autorité de certification racine utilisé pour signer le certificat de votre serveur. La façon dont vous corrigez cela dépend du système d'exploitation utilisé, de la version, etc. (Je soupçonne que ce n'est pas lié)
  2. Votre CERT n'est pas installé correctement. Si votre certificat SSL nécessite la présentation d'un certificat intermédiaire et que vous ne l'avez pas configuré, vous pouvez obtenir ces avertissements.
  3. Êtes-vous sûr d'avoir activé SSL sur le port 443? 

Pour commencer, pour éliminer (3), que se passe-t-il si vous utilisez un telnet sur ce port?

En supposant que ce ne soit pas (3), alors, en fonction de vos besoins, vous pourrez peut-être ignorer ces erreurs et simplement passer --no-certificate-check. Vous voudrez probablement utiliser un navigateur standard (qui généralement regroupera directement les certificats racine) et voir si tout va bien.

Si vous souhaitez vérifier manuellement le certificat, publiez plus de détails à partir de la sortie openssl s_client. Ou utilisez openssl x509 -text -in /path/to/cert pour l’imprimer sur votre terminal.

4
Dave S.

J'ai eu ce problème lors de la configuration d'une nouvelle instance EC2. Je n'avais pas ajouté HTTPS à mon groupe de sécurité et le port 443 n'était donc pas ouvert.

2
Steve Ellis

Pour moi, un nom DNS de mon serveur a été ajouté à/etc/hosts et a été mappé sur 127.0.0.1, ce qui a entraîné: 

SL23_GET_SERVER_HELLO: protocole inconnu

Supprimer le mappage de mon vrai nom DNS en 127.0.0.1 a résolu le problème.

1
Kirill Oficerov

Ce problème ne m'est arrivé que dans des cas particuliers, lorsque j'ai appelé le site Web de certains fournisseurs d'accès Internet,

J'ai configuré uniquement ip v4 dans la configuration de VirtualHost d'Apache, mais certains routeurs utilisent ip v6. Lorsque j'ai ajouté ip v6 à Apache, le problème a été résolu.

0
masoud2011

Je rencontre la même question. Le port 443 n'était pas ouvert à Centos.

Vérifiez le port 443 avec la commande suivante:

Sudo lsof -i tcp: 443

Dans la première ligne de /etc/httpd/conf.d/ssl.conf ajoutez ces deux lignes:

LoadModule ssl_module modules/mod_ssl.so
Listen 443
0
GeekHades