SSL-Protokollfehler beheben: Handshake-Probleme erkennen, analysieren und lösen

SSL-(Secure Sockets Layer)-Protokollfehler gehören zu den häufigsten sicherheitsbezogenen Problemen, die beim Aufbau sicherer Verbindungen zwischen Clients und Servern auftreten. Solche Schwierigkeiten entstehen, wenn es während des SSL/TLS-Handshakes zu Abweichungen, Konflikten oder Inkompatibilitäten kommt, wodurch keine sichere Sitzung aufgebaut werden kann.

Der SSL-Protokollfehler – oft als ERR_SSL_PROTOCOL_ERROR angezeigt – taucht häufig in Browsern wie Chrome und Firefox auf. Er verhindert, dass Nutzer eine sichere Verbindung zu einer Website herstellen, und kann den Zugriff mit Meldungen stoppen, die unklar oder schwer verständlich wirken.

In diesem Tutorial lernst du, wie du die häufigsten SSL-Protokollfehler sowohl serverseitig als auch clientseitig erkennst, untersuchst und behebst. Am Ende verfügst du über eine strukturierte Vorgehensweise zur Fehlersuche bei SSL-Problemen sowie über das Wissen, um nachhaltige Lösungen umzusetzen.

Voraussetzungen

Bevor du mit dieser Anleitung startest, benötigst du:

  • Einen Server mit Ubuntu oder einer anderen Linux-Distribution.
  • Root- oder sudo-Berechtigungen auf deinem Server.
  • Grundlegende Vertrautheit mit der Kommandozeile.
  • Einen Domainnamen, der auf deinen Server zeigt (zum Testen von SSL-Konfigurationen).
  • Grundverständnis von SSL/TLS-Konzepten

Häufige SSL-Protokollfehler verstehen

Ein SSL-Protokollfehler kann entweder im Browser oder auf dem Server entstehen und verhindert den erfolgreichen Aufbau einer sicheren HTTPS-Verbindung. In diesem Fall sehen Nutzer oft Fehlermeldungen wie:

ERR_SSL_PROTOCOL_VERSION_ALERT

Dieses Problem tritt auf, wenn Client und Server sich nicht auf eine gemeinsame SSL/TLS-Protokollversion einigen können. Moderne Browser erwarten TLS 1.2 oder neuer, während ältere Server möglicherweise noch veraltete Versionen zulassen. Das passiert häufig, wenn:

  • Der Server auf alte und unsichere Protokolle wie SSL 3.0 oder TLS 1.0 eingestellt ist
  • Der Client (Browser) die Unterstützung älterer Protokolle aus Sicherheitsgründen deaktiviert oder entfernt hat
  • Ein Proxy oder eine Firewall dazwischenliegt und die Aushandlung der Protokolle stört

ERR_SSL_HANDSHAKE_FAILURE

Das passiert, wenn der SSL/TLS-Handshake keine sichere Verbindung zwischen Client und Server herstellen kann. Der Handshake umfasst mehrere Schritte:

  • Client Hello: Der Client startet die Verbindung und sendet unterstützte SSL/TLS-Versionen sowie Cipher Suites
  • Server Hello: Der Server antwortet mit der ausgewählten Protokollversion und Cipher Suite
  • Certificate Exchange: Der Server liefert sein SSL-Zertifikat zur Prüfung
  • Key Exchange: Beide Seiten handeln Verschlüsselungsschlüssel für die Sitzung aus
  • Finished: Der Handshake wird abgeschlossen und die sichere Kommunikation beginnt

Typische Gründe für Handshake-Fehler sind:

  • Cipher Suites, die zwischen Client und Server nicht kompatibel sind
  • Probleme bei der Validierung der Zertifikatskette
  • Schwierigkeiten bei der Client-Authentifizierung
  • Netzwerkunterbrechungen während des Handshakes
  • Serverseitige Konfigurationsprobleme bei SSL/TLS
  • Konflikte bei Protokollversionen
  • Ungültige oder abgelaufene Zertifikate
  • Clientseitige Sicherheitssoftware, die die Verbindung stört

ERR_SSL_NO_CYPHER_OVERLAP

Dieser Fehler tritt auf, wenn Client und Server keine gemeinsamen Cipher Suites für die Verschlüsselung haben. Das ist oft der Fall, wenn:

  • Der Server nur eine sehr eingeschränkte Auswahl an Cipher Suites erlaubt
  • Der Client ausschließlich Cipher Suites unterstützt, die für den Server zu modern sind
  • Die Cipher-Konfiguration des Servers nicht zu seiner SSL/TLS-Protokollversion passt
  • Sicherheitsrichtlinien auf einer der Seiten zu restriktiv sind

ERR_SSL_CERTIFICATE_INVALID

Dieser Fehler erscheint, wenn das SSL-Zertifikat Probleme hat, etwa durch Ablauf, Hostname-Mismatch oder eine fehlerhafte Zertifikatskette. Häufige Ursachen sind:

  • Das Zertifikat ist abgelaufen oder noch nicht gültig
  • Common Name (CN) oder Subject Alternative Names (SANs) passen nicht zur Domain
  • Die Zertifikatskette ist unvollständig oder defekt
  • Das Zertifikat wurde von einer nicht vertrauenswürdigen Certificate Authority (CA) ausgestellt
  • Das Zertifikat wurde widerrufen
  • Der Signaturalgorithmus des Zertifikats gilt als unsicher

Ein Zertifikats-Mismatch entsteht, wenn die im SSL-Zertifikat angegebene Domain nicht zur tatsächlich aufgerufenen Domain passt. Das kann auf mehrere Arten passieren:

  • Domain Name Mismatch: Das Zertifikat wurde für example.com ausgestellt, wird aber für www.example.com oder eine Subdomain verwendet
  • IP Address Mismatch: Das Zertifikat wurde für einen Domainnamen ausgestellt, wird aber auf einer IP-Adresse genutzt
  • Wildcard Certificate Issues: Ein Wildcard-Zertifikat (*.example.com) deckt möglicherweise nicht alle Subdomains ab, wenn es nicht korrekt konfiguriert ist
  • Multi-Domain Certificate Problems: Ein Zertifikat mit mehreren Subject Alternative Names (SANs) enthält eventuell nicht alle benötigten Domains

So lassen sich Zertifikats-Mismatches beheben:

  • Stelle sicher, dass der Common Name (CN) zur primären Domain passt
  • Füge alle erforderlichen Domains in die Subject Alternative Names (SANs) ein
  • Nutze ein Wildcard-Zertifikat, wenn mehrere Subdomains abgedeckt werden müssen
  • Prüfe, ob das Zertifikat auf dem richtigen Server und für die richtige Domain installiert ist

Hier ist eine Tabelle, die die häufigsten SSL-Protokollfehler und deren Ursachen zusammenfasst:

Ursache Beschreibung Lösung
Invalid SSL Certificate Abgelaufene, falsch konfigurierte oder selbstsignierte Zertifikate Abgelaufene Zertifikate erneuern, Zertifikatsketten korrekt konfigurieren oder ein gültiges Zertifikat von einer vertrauenswürdigen CA beziehen
Mismatched SSL Protocols Server und Browser unterstützen inkompatible Versionen (z. B. TLS 1.0 vs 1.3) Serverkonfiguration auf moderne TLS-Versionen (1.2+) aktualisieren und Protokoll-Aushandlung aktivieren
System Clock Issues Falsche Systemzeit/-datum verursachen Fehler bei der Zertifikatsprüfung Systemzeit mit NTP-Servern via ntpdate synchronisieren oder automatische Zeitsynchronisierung aktivieren
Antivirus or Firewall Blocking Sicherheitswerkzeuge stören SSL-Datenverkehr Sicherheitswerkzeuge so konfigurieren, dass SSL/TLS-Verkehr erlaubt ist, oder zum Testen vorübergehend deaktivieren.
Browser Cache or Cookies Beschädigte Cache-Daten können sichere Sitzungen unterbrechen Browser-Cache und Cookies löschen oder im Inkognito-/Privatmodus testen
OS or Browser Outdated Alte Versionen unterstützen moderne SSL/TLS-Protokolle eventuell nicht Betriebssystem und Browser auf aktuelle Versionen aktualisieren, die moderne TLS-Protokolle unterstützen
DNS or Hosts File Conflict Falsche DNS-Konfiguration oder Hosts-Einträge verursachen Zertifikats-Mismatches DNS-Records prüfen, DNS-Cache leeren und Hosts-Datei auf konfliktierende Einträge kontrollieren
Server Misconfiguration Falsche HTTPS-Einstellungen oder abgelaufene Zertifikate auf dem Server SSL-Konfiguration des Servers prüfen und aktualisieren, korrekte Zertifikatsinstallation sicherstellen
SSL Cache Issues Beschädigter SSL-Session-Cache führt zu Handshake-Fehlern SSL-Session-Cache mit openssl s_client -connect und -no_ticket leeren oder SSL-Dienste neu starten
System DNS Cache Veraltete DNS-Records verursachen Probleme bei der Zertifikatsprüfung System-DNS-Cache per systemd-resolve –flush-caches leeren oder DNS-Dienste neu starten

Diagnose-Tools installieren

Bevor du SSL-Fehler untersuchst, musst du zentrale Diagnose-Tools installieren. Diese Werkzeuge helfen dir dabei, SSL-Konfigurationen zu prüfen und die Ursache gezielt einzugrenzen.

Paketindex aktualisieren:

OpenSSL für Zertifikats- und Verbindungsprüfungen installieren:

Der Befehl openssl bietet umfangreiche Funktionen zum Testen von SSL/TLS, darunter Zertifikatsvalidierung, Protokolltests und Analysen von Cipher Suites.

curl für HTTP/HTTPS-Prüfungen installieren:

Curl ermöglicht HTTP/HTTPS-Anfragen mit detaillierten SSL-Debug-Informationen, was für die Analyse von Verbindungsproblemen entscheidend ist.

nmap für Port- und SSL-Service-Scans installieren:

Nmap kann offene Ports erkennen und SSL-Services testen, wodurch du Konfigurationsprobleme auf Netzwerkebene identifizieren kannst.

Wie lassen sich SSL-Protokollfehler serverseitig diagnostizieren?

Sobald die benötigten Tools installiert sind, kannst du SSL-Protokollfehler strukturiert untersuchen.

SSL-Verbindung mit OpenSSL testen

Nutze OpenSSL, um die SSL-Verbindung zu deinem Server zu testen:

openssl s_client -connect your-domain.com:443 -servername your-domain.com

Ersetze your-domain.com durch deine tatsächliche Domain. Die Option -servername aktiviert Server Name Indication (SNI), was erforderlich ist, wenn ein Server mehrere SSL-Zertifikate hostet.

Dieser Befehl gibt detaillierte Handshake-Informationen aus. Achte besonders auf:

  • Protocol version: Sollte TLS 1.2 oder TLS 1.3 anzeigen
  • Cipher suite: Die verwendete Verschlüsselungsmethode
  • Certificate chain: Status der Zertifikatsprüfung
  • Handshake status: Ob die Verbindung erfolgreich hergestellt wurde

Beispiel für eine erfolgreiche SSL-Verbindung:

CONNECTED(00000003)
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = your-domain.com
verify return:1
---
Certificate chain
 0 s:/CN=your-domain.com
   i:/C=US/O=Let's Encrypt/CN=R3
 1 s:/C=US/O=Let's Encrypt/CN=R3
   i:/C=US/O=Internet Security Research Group/CN=ISRG Root X1
---
Server certificate
-----BEGIN CERTIFICATE-----
... (Certificate details)
-----END CERTIFICATE-----
subject=/CN=your-domain.com
issuer=/C=US/O=Let's Encrypt/CN=R3
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3053 bytes and written 456 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN, server accepted to use h2
---

Beispiel für eine fehlgeschlagene SSL-Verbindung:

CONNECTED(00000003)
depth=0 CN = your-domain.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = your-domain.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/CN=your-domain.com
   i:/C=US/O=Let's Encrypt/CN=R3
---
Server certificate
-----BEGIN CERTIFICATE-----
... (Certificate details)
-----END CERTIFICATE-----
subject=/CN=your-domain.com
issuer=/C=US/O=Let's Encrypt/CN=R3
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3053 bytes and written 456 bytes
Verification error: unable to verify the first certificate
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN, server accepted to use h2
---

Erklärung und Behebung:

Die SSL-Verbindung ist fehlgeschlagen, weil die Zertifikatskette nicht verifiziert werden konnte. Konkret treten diese Fehler auf:

  • verify error:num=20:unable to get local issuer certificate: Das bedeutet, dass der Client (hier openssl s_client) das Ausstellerzertifikat nicht im Vertrauensspeicher finden konnte. Meist fehlt das Intermediate-Zertifikat oder es ist falsch konfiguriert.
  • verify error:num=21:unable to verify the first certificate: Dieser Fehler ergibt sich aus dem vorherigen Problem, weil ohne Intermediate-Zertifikat das erste Zertifikat der Kette nicht geprüft werden kann.

Um das zu beheben, muss das Intermediate-Zertifikat auf dem Server korrekt installiert und eingebunden sein. Dazu gehört typischerweise:

  • Das Intermediate-Zertifikat von der Certificate Authority (CA) oder einer vertrauenswürdigen Quelle beziehen.
  • Das Intermediate-Zertifikat auf dem Server installieren, meist in einem bestimmten Verzeichnis oder einer Konfigurationsdatei.
  • Den Server so konfigurieren, dass er das Intermediate-Zertifikat während des SSL/TLS-Handshakes bereitstellt, was Anpassungen an SSL/TLS-Konfigurationsdateien oder Einstellungen erfordern kann.

Nachdem diese Punkte umgesetzt sind, teste die SSL-Verbindung erneut, um zu bestätigen, dass die Zertifikatskette korrekt ist und die Verbindung erfolgreich aufgebaut wird.

Unterstützte SSL/TLS-Versionen prüfen

Prüfe, welche SSL/TLS-Versionen dein Server zulässt:

openssl s_client -connect your-domain.com:443 -tls1_2 -servername your-domain.com

Output:

CONNECTED(00000003)
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = your-domain.com
verify return:1
---
Certificate chain
 0 s:/CN=your-domain.com
   i:/C=US/O=Let's Encrypt/CN=R3
---
Server certificate
-----BEGIN CERTIFICATE-----
... (Certificate details)
-----END CERTIFICATE-----
subject=/CN=your-domain.com
issuer=/C=US/O=Let's Encrypt/CN=R3
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3053 bytes and written 456 bytes
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN, server accepted to use h2
---

TLS 1.3-Unterstützung testen

Prüfe, ob TLS 1.3 verfügbar ist:

openssl s_client -connect your-domain.com:443 -tls1_3 -servername your-domain.com

Output:

CONNECTED(00000003)
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = your-domain.com
verify return:1
---
Certificate chain
 0 s:/CN=your-domain.com
   i:/C=US/O=Let's Encrypt/CN=R3
---
Server certificate
-----BEGIN CERTIFICATE-----
... (Certificate details)
-----END CERTIFICATE-----
subject=/CN=your-domain.com
issuer=/C=US/O=Let's Encrypt/CN=R3
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3053 bytes and written 456 bytes
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN, server accepted to use h2
---

Fehler „wrong version number“ behandeln

Wenn ein Fehler zur falschen Versionsnummer erscheint, unterstützt der Server die angeforderte TLS-Version nicht. Zum Beispiel:

openssl s_client -connect your-domain.com:443 -tls1_1 -servername your-domain.com

Output:

140255555555:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:s3_pkt.c:1492:SSL alert number 40
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 305 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN, server accepted to use h2
---

Um den Fehler zur falschen Versionsnummer zu beheben, stelle sicher, dass dein Server so konfiguriert ist, dass er die TLS-Version unterstützt, die du verwenden willst. Dafür kann es notwendig sein, SSL/TLS-Konfigurationsdateien zu aktualisieren oder Einstellungen anzupassen, damit die gewünschte TLS-Version aktiviert ist.

Zertifikatsprobleme analysieren

Zertifikatsdetails und Gültigkeit prüfen:

openssl s_client -connect your-domain.com:443 -servername your-domain.com | openssl x509 -noout -dates

Beispielausgabe:

notBefore=May  1 00:00:00 2023 GMT
notAfter=Oct 29 23:59:59 2023 GMT

Dieser Befehl zeigt den Gültigkeitszeitraum des Zertifikats. Die Ausgabe enthält:

  • notBefore: Ab wann das Zertifikat gültig ist
  • notAfter: Wann das Zertifikat abläuft

Zertifikats-Subject und Issuer prüfen:

openssl s_client -connect your-domain.com:443 -servername your-domain.com | openssl x509 -noout -subject -issuer

Beispielausgabe:

subject=/CN=your-domain.com
issuer=/C=US/O=Let's Encrypt/CN=R3

Das hilft dabei, Hostname-Mismatches und Probleme mit der Certificate Authority zu erkennen. Du kannst dich für weitere Informationen auf dieses Tutorial zu How to Install an SSL Certificate from a Commercial Certificate Authority beziehen.

Wie lassen sich SSL-Protokollversionsfehler serverseitig beheben?

Wenn SSL-Protokollversionsfehler auftreten, musst du den Server so konfigurieren, dass moderne TLS-Versionen unterstützt werden und veraltete Versionen deaktiviert sind.

Für den Apache Web Server

Apache-SSL-Konfigurationsdatei bearbeiten:

sudo nano /etc/apache2/sites-available/your-site-ssl.conf

SSL-Protokollkonfiguration im <VirtualHost>-Block hinzufügen oder anpassen:

    ServerName your-domain.com
    DocumentRoot /var/www/your-site
    
    # SSL Configuration
    SSLEngine on
    SSLCertificateFile /path/to/your/certificate.crt
    SSLCertificateKeyFile /path/to/your/private.key
    SSLCertificateChainFile /path/to/your/ca-bundle.crt
    
    # Disable deprecated SSL versions and enable TLS 1.2+
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 +TLSv1.3
    
    # Configure secure cipher suites
    SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
    SSLHonorCipherOrder off
    
    # Enable HSTS (HTTP Strict Transport Security)
    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

Die SSLProtocol-Direktive deaktiviert explizit unsichere SSL/TLS-Versionen (SSLv2, SSLv3, TLSv1, TLSv1.1) und aktiviert sichere Versionen (TLS 1.2 und 1.3).

Apache-Konfiguration testen:

sudo apache2ctl configtest

Output:

Wenn die Konfiguration korrekt ist, erscheint Syntax OK. Apache neu laden, um die Änderungen zu übernehmen:

sudo systemctl reload apache2

Du kannst dich außerdem auf dieses Tutorial zu Steps to Configure SSL on Tomcat and Setup Auto Redirect from HTTP to HTTPS beziehen.

Für den Nginx Web Server

Nginx-SSL-Konfiguration bearbeiten:

sudo nano /etc/nginx/sites-available/your-site

SSL-Konfiguration im server-Block hinzufügen oder anpassen:

server {
    listen 443 ssl http2;
    server_name your-domain.com;
    root /var/www/your-site;
    
    # SSL Configuration
    ssl_certificate /path/to/your/certificate.crt;
    ssl_certificate_key /path/to/your/private.key;
    
    # Disable deprecated SSL versions and enable TLS 1.2+
    ssl_protocols TLSv1.2 TLSv1.3;
    
    # Configure secure cipher suites
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    
    # Enable HSTS
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    
    # SSL session optimization
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;
}

Die Direktive ssl_protocols legt fest, welche TLS-Versionen erlaubt sind, und ssl_ciphers bestimmt die zulässigen Verschlüsselungsalgorithmen.

Nginx-Konfiguration testen, um zu bestätigen, dass sie gültig ist und keine Fehler enthält:

Die Ausgabe sollte zeigen, ob die Konfiguration gültig ist. Ist sie korrekt, siehst du eine Meldung, dass die Syntax stimmt und der Test erfolgreich war. Beispiel einer erfolgreichen Ausgabe:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Wenn die Konfiguration gültig ist, Nginx neu laden, um die Änderungen zu übernehmen:

sudo systemctl reload nginx

Dieser Befehl lädt Nginx neu, ohne den Dienst zu unterbrechen, sodass Anpassungen ohne Downtime wirksam werden.

Du kannst dich außerdem auf dieses Tutorial zu How to Create a Self-Signed SSL Certificate for Nginx in Ubuntu beziehen.

Wie lassen sich zertifikatsbezogene Fehler serverseitig beheben?

Zertifikatsfehler sind eine häufige Ursache für SSL-Protokollprobleme. So kannst du sie prüfen und beheben:

Zertifikatsgültigkeit prüfen

Stelle sicher, dass dein Zertifikat nicht abgelaufen ist:

openssl x509 -in /path/to/your/certificate.crt -text -noout | grep -A 2 "Validity"

Dieser Befehl zeigt den Gültigkeitszeitraum. Ist das Zertifikat abgelaufen, musst du es erneuern.

Zertifikatskette verifizieren

Prüfe die vollständige Zertifikatskette:

openssl s_client -connect your-domain.com:443 -servername your-domain.com -showcerts

Das zeigt alle Zertifikate in der Chain. Stelle sicher, dass die Kette vollständig ist, inklusive Intermediate-Zertifikaten.

Hostname-Mismatch beheben

Wenn Hostname-Mismatch-Fehler auftreten, prüfe die Subject Alternative Names (SAN) des Zertifikats:

openssl x509 -in /path/to/your/certificate.crt -text -noout | grep -A 1 "Subject Alternative Name"

Die Ausgabe muss deinen Domainnamen enthalten. Falls nicht, brauchst du ein neues Zertifikat, das den korrekten Hostnamen enthält.

Let’s-Encrypt-Zertifikate erneuern

Wenn du Let’s-Encrypt-Zertifikate nutzt, erneuere sie mit Certbot:

sudo certbot renew --dry-run

Die Option –dry-run testet den Erneuerungsprozess, ohne das Zertifikat tatsächlich zu erneuern. Entferne die Option, um die echte Erneuerung durchzuführen:

Nach der Erneuerung starte den Webserver neu:

sudo systemctl restart apache2
# or for Nginx
sudo systemctl restart nginx

Du kannst dich außerdem auf dieses Tutorial zu How To Secure Apache with Let’s Encrypt on Ubuntu beziehen.

Wie lassen sich Cipher-Suite-Probleme serverseitig beheben?

Nicht passende Cipher Suites können SSL-Handshake-Fehler auslösen. So kannst du sichere Cipher Suites konfigurieren:

Aktuelle Cipher Suites testen

Prüfe, welche Cipher Suites dein Server unterstützt:

nmap --script ssl-enum-ciphers -p 443 your-domain.com

Die Ausgabe sollte ähnlich aussehen wie diese:

Starting Nmap 7.92 ( https://nmap.org )
Nmap scan report for your-domain.com (192.168.1.1)
Host is up (0.00044s latency).
PORT    STATE SERVICE
443/tcp open  https
| ssl-enum-ciphers:
|   TLSv1.2:
|     ciphers:
|       TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
|       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
|       TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
|       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) - A
|     compressors:
|       NULL
|     cipher preference: server
|_  least strength: A

Diese Ausgabe listet alle unterstützten Cipher Suites inklusive Sicherheitsbewertung auf.

Sichere Cipher Suites konfigurieren

Für Apache fügst du Folgendes in deine SSL-Konfiguration ein:

# Modern cipher suite configuration
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384

# Disable weak ciphers
SSLCipherSuite !aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA

Für Nginx verwendest du:

# Modern cipher suite configuration
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

Diese Konfigurationen priorisieren moderne, sichere Cipher Suites und halten gleichzeitig die Kompatibilität mit den meisten Clients aufrecht.

Tests und Verifizierung

Nachdem du Korrekturen umgesetzt hast, solltest du die SSL-Konfiguration gründlich validieren:

SSL/TLS-Konfiguration verifizieren

Teste die SSL-Verbindung erneut:

openssl s_client -connect your-domain.com:443 -servername your-domain.com

Achte auf Handshake-Erfolgsmeldungen und bestätige, dass die Protokollversion TLS 1.2 oder neuer ist.

Mit mehreren Browsern testen

Teste deine Website in verschiedenen Browsern, um Kompatibilität zu bestätigen:

  • Chrome
  • Firefox
  • Safari
  • Edge

Jeder Browser setzt teils unterschiedliche SSL/TLS-Anforderungen durch, daher hilft ein Cross-Browser-Test dabei, breite Kompatibilität sicherzustellen.

Online-SSL-Testtools nutzen

Nutze den SSL Server Test von SSL Labs, um eine vollständige Analyse zu erhalten:

curl -s "https://api.ssllabs.com/api/v3/analyze?host=your-domain.com&publish=off&all=done" | jq .

Das liefert detaillierte Einblicke in die SSL-Konfiguration und hebt potenzielle Sicherheitsprobleme hervor.

Zertifikatskette verifizieren

Stelle sicher, dass deine Zertifikatskette vollständig ist:

openssl s_client -connect your-domain.com:443 -servername your-domain.com | openssl x509 -noout -text | grep -A 5 "Issuer"

Die Ausgabe sollte die Certificate Authority anzeigen, die dein Zertifikat ausgestellt hat.

Monitoring und Wartung

Richte kontinuierliches Monitoring ein, um das Risiko zukünftiger SSL-Protokollfehler zu reduzieren:

Monitoring für Zertifikatsablauf einrichten

Erstelle ein Skript, das den Zertifikatsablauf prüft:

#!/bin/bash
# Certificate expiration check script

DOMAIN="your-domain.com"
DAYS_BEFORE_EXPIRY=30

# Get certificate expiration date
EXPIRY_DATE=$(openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)

# Convert to seconds since epoch
EXPIRY_SECONDS=$(date -d "$EXPIRY_DATE" +%s)
CURRENT_SECONDS=$(date +%s)

# Calculate days until expiry
DAYS_UNTIL_EXPIRY=$(( (EXPIRY_SECONDS - CURRENT_SECONDS) / 86400 ))

if [ $DAYS_UNTIL_EXPIRY -le $DAYS_BEFORE_EXPIRY ]; then
    echo "Certificate for $DOMAIN expires in $DAYS_UNTIL_EXPIRY days!"
    # Add notification logic here (email, Slack, etc.)
fi

Speichere das Skript als /usr/local/bin/check-ssl-expiry.sh und mache es ausführbar:

sudo chmod +x /usr/local/bin/check-ssl-expiry.sh

Regelmäßige SSL-Prüfungen planen

Füge einen Cron-Job hinzu, damit die Zertifikatsprüfung täglich läuft:

Füge diese Zeile hinzu, um Zertifikate jeden Tag um 9 Uhr zu prüfen:

0 9 * * * /usr/local/bin/check-ssl-expiry.sh

SSL-Logging im Webserver aktivieren

Für Apache aktivierst du SSL-Logging im VirtualHost:

LogLevel warn ssl:info
CustomLog /var/log/apache2/ssl_request.log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

Für Nginx ergänzt du SSL-spezifisches Logging:

access_log /var/log/nginx/ssl_access.log combined;
error_log /var/log/nginx/ssl_error.log warn;

Diese Logs helfen dabei, SSL-bezogene Probleme zu erkennen und das Verbindungsverhalten zu beobachten.

Wie behebt man den SSL-Protokollfehler client-/browserseitig?

Website-URL prüfen

Wenn du eine Website aufrufst, prüfe, ob die Adresse mit HTTPS (Hypertext Transfer Protocol Secure) statt HTTP (Hypertext Transfer Protocol) beginnt. Das ist wichtig, weil HTTP nicht sicher ist und Daten für Abhören, Manipulation und Man-in-the-Middle-Angriffe anfällig machen kann. Ein kleiner Tippfehler oder eine Fehlkonfiguration kann dich auf einen unsicheren Endpunkt leiten und SSL-Protokollfehler auslösen. Stelle daher immer sicher, dass die URL das sichere Protokoll verwendet.

Browser-Cache und Cookies löschen

Browser-Caches und Cookies können beschädigt sein und dadurch Probleme bei SSL-Handshakes verursachen. Das Löschen kann SSL-Protokollfehler beheben. Schritte zum Löschen von Browsing-Daten in gängigen Browsern sind:

  • Google Chrome: Settings > Privacy and Security > Clear browsing data
  • Mozilla Firefox: Options > Privacy & Security > Cookies and Site Data > Clear Data
  • Safari: Safari > Clear History and Website Data
  • Microsoft Edge: Settings > Privacy > Clear browsing data

Dadurch werden Browserverlauf, Cookies und andere gespeicherte Website-Daten entfernt, die SSL-Verbindungen stören können.

SSL-Status löschen (nur Windows)

Unter Windows kannst du den SSL-Status löschen, um SSL-Protokollfehler zu beheben. So geht’s:

  • Drücke Windows + R, um das Ausführen-Dialogfeld zu öffnen.
  • Tippe inetcpl.cpl und drücke Enter.
  • Wechsle im Fenster „Internet Properties“ zum Tab „Content“.
  • Klicke auf Clear SSL state.

Damit wird der SSL-Status gelöscht und Probleme im Zusammenhang mit SSL-Protokollfehlern können behoben werden.

Systemuhr prüfen

Eine falsche Systemuhr kann die Zertifikatsprüfung scheitern lassen und SSL-Protokollfehler verursachen. Stelle sicher, dass Datum und Uhrzeit deines Betriebssystems korrekt sind. Das ist entscheidend, weil SSL-Zertifikate anhand des aktuellen Datums und der aktuellen Uhrzeit geprüft werden. Ist die Uhr falsch, kann der Browser das Zertifikat als ungültig oder abgelaufen bewerten und SSL-Protokollfehler ausgeben.

Browser aktualisieren

Ein veralteter Browser kann aufgrund von Kompatibilitätsproblemen mit modernen SSL-Protokollen SSL-Protokollfehler verursachen. Stelle sicher, dass du die aktuelle Version verwendest, um mit modernen SSL/TLS-Protokollen kompatibel zu bleiben. Du kannst deinen Browser über folgende Links aktualisieren:

  • Google Chrome
  • Mozilla Firefox
  • Safari
  • Microsoft Edge

Durch Updates erhältst du aktuelle Sicherheitspatches und Unterstützung für moderne SSL/TLS-Protokolle.

VPN, Antivirus oder Firewall vorübergehend deaktivieren

In einigen Fällen stören Sicherheitswerkzeuge wie VPNs, Antivirus-Software oder Firewalls die SSL/TLS-Kommunikation und verursachen SSL-Protokollfehler. Ein temporäres Deaktivieren kann helfen festzustellen, ob sie die Ursache sind. Verschwindet der Fehler, musst du diese Tools so konfigurieren, dass SSL/TLS-Verkehr erlaubt ist, oder Ausnahmen für die betroffene Website setzen.

Internetverbindung oder Netzwerkeinstellungen prüfen

Auch Verbindungsprobleme oder fehlerhafte Netzwerkeinstellungen können SSL-Protokollfehler auslösen. Probiere ein anderes Netzwerk aus oder setze Router- oder DNS-Einstellungen bei Bedarf zurück. Das kann Probleme lösen, die mit Konnektivität oder DNS-Auflösung zusammenhängen und SSL-Protokollfehler begünstigen.

Einen anderen Browser ausprobieren

Treten SSL-Protokollfehler in einem Browser auf, aber nicht in einem anderen, deutet das auf ein browserspezifisches Problem hin. Das kann mit Cache, Erweiterungen oder Einstellungen zusammenhängen. Öffne die Website in einem anderen Browser, um die Ursache einzugrenzen. Ist es browserspezifisch, hilft oft Cache löschen, Erweiterungen deaktivieren oder Browser-Einstellungen anpassen.

FAQs

Was bedeutet SSL Protocol Error?

Ein SSL Protocol Error tritt auf, wenn es ein Problem im SSL/TLS-Handshake zwischen deinem Browser und dem Server gibt. Das kann aus mehreren Gründen passieren, darunter veraltete SSL/TLS-Versionen, falsch konfigurierte Zertifikate oder Probleme in der SSL/TLS-Serverkonfiguration. Der Fehler verhindert den Aufbau der sicheren Verbindung und trägt dazu bei, dass deine Daten geschützt bleiben.

Was verursacht ERR_SSL_PROTOCOL_ERROR in Chrome?

ERR_SSL_PROTOCOL_ERROR in Chrome wird meist durch einen Konflikt zwischen den SSL/TLS-Protokollversionen verursacht, die Browser und Server unterstützen. Er kann außerdem durch Probleme im SSL/TLS-Setup des Servers entstehen, etwa durch ein ungültiges oder abgelaufenes Zertifikat oder weil der Server nicht für aktuelle SSL/TLS-Protokolle konfiguriert ist. Zusätzlich können Antivirus-Software, Firewalls oder VPNs SSL/TLS-Verbindungen stören und diesen Fehler auslösen.

Wie lösche ich den SSL-Status in Windows?

Um den SSL-Status in Windows zu löschen, folge diesen Schritten:

  • Drücke Windows + R, um das Ausführen-Dialogfeld zu öffnen.
  • Tippe inetcpl.cpl und drücke Enter.
  • Wechsle im Fenster „Internet Properties“ zum Tab „Content“.
  • Klicke auf Clear SSL state.

Damit wird der SSL-Status gelöscht und Probleme im Zusammenhang mit SSL-Protokollfehlern können behoben werden.

Wie erkenne ich, ob der SSL-Fehler bei mir oder am Server liegt?

Um herauszufinden, ob ein SSL-Fehler von deiner Seite oder vom Server kommt, gehe so vor:

  • Systemuhr prüfen: Stelle sicher, dass deine Systemuhr korrekt ist, da eine falsche Uhr Zertifikatsprüfungen scheitern lassen kann.
  • Browser und OS prüfen: Aktualisiere Browser und Betriebssystem, weil alte Versionen moderne SSL/TLS-Protokolle möglicherweise nicht unterstützen.
  • Einen anderen Browser testen: Tritt der Fehler nur in einem Browser auf, kann es browserspezifisch sein.
  • Antivirus und Firewall prüfen: Deaktiviere Antivirus, Firewall oder VPN testweise, um zu prüfen, ob sie SSL/TLS stören.
  • Website-Administrator kontaktieren: Wenn nichts hilft, ist es wahrscheinlich ein serverseitiges Problem. Kontaktiere den Administrator oder versuche es später erneut.

Mit diesen Schritten kannst du erkennen, ob der SSL-Fehler an deinem lokalen Setup oder an der Serverkonfiguration liegt.

Fazit

Du hast gelernt, wie du SSL-Protokollfehler sowohl serverseitig als auch clientseitig analysierst und behebst. Die strukturierte Vorgehensweise in diesem Tutorial bietet einen Weg, die häufigsten SSL-Probleme zu diagnostizieren und zu lösen:

  • Diagnostic Phase: Mit Tools wie OpenSSL, curl und nmap gezielt SSL-Probleme identifizieren
  • Configuration Phase: Webserver-Konfigurationen so anpassen, dass moderne SSL/TLS-Protokolle und sichere Cipher Suites genutzt werden
  • Certificate Management: Sicherstellen, dass Zertifikate gültig, korrekt konfiguriert und mit den richtigen Hostnamen versehen sind
  • Testing and Verification: Bestätigen, dass Änderungen Probleme lösen und zugleich kompatibel bleiben
  • Ongoing Monitoring: Systeme einführen, um zukünftige SSL-Probleme zu vermeiden

Wenn du diese Praktiken umsetzt, hältst du SSL/TLS-Verbindungen sicher und bietest Nutzern eine bessere Erfahrung. Regelmäßiges Monitoring und proaktives Zertifikatsmanagement helfen dabei, SSL-Protokollfehler zu verhindern, bevor sie deine Services beeinträchtigen.

Für zusätzliche Sicherheit solltest du in Betracht ziehen, HTTP Strict Transport Security (HSTS), Certificate Transparency Monitoring und regelmäßige Sicherheits-Audits deiner SSL-Konfiguration umzusetzen.

Quelle: digitalocean.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren: