Zum Inhalt springen
ecdsa.com
Ruby openssl (Net::HTTP, Faraday, RubyGems)Ruby

Fehlermeldung

state=error: certificate verify failed (self-signed certificate in certificate chain)

Auch ausgegeben als

  • OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 peeraddr=127.0.0.1:8443 state=error: certificate verify failed (self-signed certificate in certificate chain)

Die vollständige Meldung lautet „SSL_connect returned=1 errno=0 peeraddr=<ip>:<port> state=error: certificate verify failed (self-signed certificate in certificate chain)“. Ruby-Versionen auf Basis von OpenSSL 1.1.1 geben „self signed“ ohne Bindestrich aus.

Ruby openssl (Net::HTTP, Faraday, RubyGems) — OpenSSL::SSL::SSLError from SSL_connect

Was der Fehler bedeutet

Die Kette des Servers endet in einem selbstsignierten Root-Zertifikat, dem das OpenSSL von Ruby nicht vertraut. Bei öffentlichen Hosts wie rubygems.org bedeutet das, dass ein Proxy mit TLS-Inspektion oder ein Virenscanner die Verbindung neu signiert; bei internen Hosts fehlt das Root-Zertifikat der Firma in dem Zertifikatsspeicher, den Ruby verwendet.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Root-Zertifikat identifizieren

    Gib die Kette für einen öffentlichen Host aus; ein Root-Zertifikat, das nach deiner Firma oder einem Sicherheitsanbieter benannt ist, ist das, dem du vertrauen musst.

    bash
    openssl s_client -connect rubygems.org:443 -servername rubygems.org -showcerts </dev/null 2>/dev/null \
      | grep -E '^ *[0-9]+ s:|^ *i:'
  2. 2.

    SSL_CERT_FILE auf ein kombiniertes Bundle zeigen lassen

    Kombiniere die öffentlichen Root-Zertifikate mit dem Root-Zertifikat des Proxys, denn SSL_CERT_FILE ersetzt das Standard-Bundle.

    bash
    # Public roots + the proxy root in one bundle
    cat /etc/ssl/certs/ca-certificates.crt corp-proxy-root.pem > ~/.config/corp-ca-bundle.pem
    export SSL_CERT_FILE=~/.config/corp-ca-bundle.pem
  3. 3.

    Root-Zertifikat systemweit installieren (Linux)

    Ruby-Versionen, die gegen das OpenSSL des Systems gelinkt sind, übernehmen das Root-Zertifikat nach einem Lauf von update-ca-certificates.

    bash
    sudo cp corp-proxy-root.pem /usr/local/share/ca-certificates/corp-proxy-root.crt && sudo update-ca-certificates

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen