it-swarm.com.de

SSL-Verbindung kann nicht hergestellt werden. Wie kann ich mein SSL-Zertifikat reparieren?

Ich versuche, wget auf meine eigene Box zuzugreifen, und es kann keine interne Adresse im Wget sein (sagt ein anderer Entwickler).

Wenn ich wget, bekomme ich folgendes:

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.

Ich glaube es liegt daran, dass ich das Zertifikat nicht richtig eingerichtet habe. Openssl verwenden:

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

Wenn ich den gleichen Befehl auf einer anderen Site ausführen, wird das gesamte Zertifikat angezeigt. 

Vielleicht wurde das SSL-Zertifikat niemals in der conf-Datei auf Apache für diese Domäne eingerichtet?

Wenn ja, was muss ich im virtuellen Host angeben? Gibt es eine andere Alternative als die Angabe von --no-check-certificate, weil ich das nicht tun möchte?

54
meder omuraliev

SSL23_GET_SERVER_HELLO: unbekanntes Protokoll

Dieser Fehler tritt auf, wenn OpenSSL in einer Protokollversion, die es vom Server versteht, etwas anderes als eine ServerHello empfängt. Es kann vorkommen, dass der Server mit einem einfachen (unverschlüsselten) HTTP antwortet. Es kann auch vorkommen, wenn der Server nur z. TLS 1.2 und der Client versteht diese Protokollversion nicht. Normalerweise sind Server abwärtskompatibel zu mindestens SSL 3.0/TLS 1.0, aber möglicherweise ist dieser Server nicht (nach Implementierung oder Konfiguration).

Es ist unklar, ob Sie versucht haben, --no-check-certificate zu übergeben oder nicht. Ich wäre ziemlich überrascht, wenn das klappen würde.

Ein einfacher Test ist die Verwendung von wget (oder eines Browsers), um http://example.com:443 anzufordern (beachten Sie den http://, nicht https://); Wenn dies funktioniert, ist SSL an Port 443 nicht aktiviert. Verwenden Sie openssl s_client mit der Option -debug, um dieses Problem zu beheben. Kurz vor der Fehlermeldung werden die ersten Bytes der Serverantwort ausgegeben, die OpenSSL nicht analysieren konnte. Dies kann hilfreich sein, um das Problem zu identifizieren, insbesondere wenn der Server nicht mit einer ServerHello-Nachricht antwortet. Um herauszufinden, was genau OpenSSL erwartet, überprüfen Sie die Quelle: Suchen Sie in SSL_R_UNKNOWN_PROTOCOL nach ssl/s23_clnt.c.

In jedem Fall kann ein Blick auf das Apache-Fehlerprotokoll auch einige Einblicke bieten.

84

In meinem Fall hatte ich die Site 'default-ssl' nicht aktiviert. Im Ordner /etc/Apache2/sites-enabled wurde nur '000-default' aufgelistet.

Aktivieren Sie die SSL-Site auf Ubuntu 14 LTS, Apache 2.4.7:

a2ensite default-ssl
service Apache2 reload
18
angularsen

Nur eine kurze Notiz (und mögliche Ursache).

Sie können ein VirtualHost-Setup mit _default_:443 usw. in Ihrer Apache-.conf-Datei verwenden. 

But ... Wenn es sogar eine .conf-Datei mit falschen Einstellungen gibt, die auch Port 443 überwacht, wird das gesamte SSL-System heruntergefahren. 

Wenn Sie sich sicher sind, dass Ihre .conf-Datei korrekt ist, deaktivieren Sie die anderen .conf-Dateien der Site in sites-enabled.

9
Nostalg.io

Es gibt einige Möglichkeiten:

  1. Ihre Workstation verfügt nicht über das Root-CA-Zertifikat, mit dem das Zertifikat Ihres Servers signiert wurde. Wie genau Sie das beheben, hängt davon ab, welches Betriebssystem Sie verwenden und welche Version usw. (Ich vermute, das ist nicht verwandt)
  2. Ihr Zertifikat ist nicht richtig installiert. Wenn für Ihr SSL-Zertifikat ein Zwischenzertifikat erforderlich ist und Sie das nicht eingerichtet haben, können Sie diese Warnungen erhalten.
  3. Sind Sie sicher, dass Sie SSL an Port 443 aktiviert haben? 

Was passiert, wenn Sie zu diesem Port telnet (3)?

Angenommen, es ist nicht (3), können Sie diese Fehler ignorieren und --no-certificate-check übergeben, je nach Ihren Bedürfnissen. Sie möchten wahrscheinlich einen normalen Browser verwenden (der die Stammzertifikate im Allgemeinen direkt bündelt) und prüfen, ob die Dinge zufrieden sind.

Wenn Sie das Zertifikat manuell überprüfen möchten, buchen Sie weitere Details in der openssl s_client-Ausgabe. Oder drucken Sie es mit openssl x509 -text -in /path/to/cert an Ihr Terminal aus.

4
Dave S.

Dieses Problem hatte ich beim Einrichten einer neuen EC2-Instanz. Ich hatte HTTPS nicht zu meiner Sicherheitsgruppe hinzugefügt, sodass Port 443 nicht geöffnet war.

2
Steve Ellis

Für mich wurde ein DNS-Name meines Servers zu/etc/hosts hinzugefügt und dieser wurde 127.0.0.1 zugeordnet, was dazu führte 

SL23_GET_SERVER_HELLO: unbekanntes Protokoll

Durch das Entfernen der Zuordnung meines echten DNS-Namens zu 127.0.0.1 wurde das Problem behoben.

1
Kirill Oficerov

Dieses Problem trat bei mir nur in besonderen Fällen auf, als ich die Website von einigen Internetanbietern anrief,

Ich habe in der VirtualHost-Konfiguration von Apache nur ip v4 konfiguriert, aber einige Router verwenden ip v6. Als ich ip v6 zu Apache config hinzufügte, wurde das Problem behoben.

0
masoud2011

Ich habe dieselbe Frage. Der Port 443 war in Centos nicht geöffnet.

Überprüfen Sie den 443-Port mit dem folgenden Befehl:

Sudo lsof -i tcp: 443

In der ersten Zeile von /etc/httpd/conf.d/ssl.conf fügen Sie diese beiden Zeilen hinzu:

LoadModule ssl_module modules/mod_ssl.so
Listen 443
0
GeekHades