App/Curl erhält aufgrund eines abgelaufenen Let’s Encrypt-Zertifikats immer noch den Fehler „Zertifikat abgelaufen“.

Eine Open-Source-App, die auf meinem macOS 10.13.6- und 10.14.6-System ausgeführt wird, kann nicht über https auf eine Website zugreifen, die ein Let's Encrypt-Zertifikat verwendet. Wenn ich curlauf dieselbe Site zugreife, wird auch eine Fehlermeldung angezeigt, dass das Zertifikat abgelaufen ist.

Hier ist die Ausgabe von curl -vvmit redigiertem Hostnamen und IP-Adresse:

* Rebuilt URL to: https://hostname/
*   Trying x.x.x.x...
* TCP_NODELAY set
* Connected to hostname (x.x.x.x) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS alert, Server hello (2):
* SSL certificate problem: certificate has expired
* stopped the pause stream!
* Closing connection 0
curl: (60) SSL certificate problem: certificate has expired
More details here: https://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default...
(rest of text not relevant and removed)

Ich habe bestätigt, dass das ISRG Root X1-Zertifikat in der Schlüsselbundverwaltung installiert und vertrauenswürdig ist.

Außerdem kann ich mit Safari oder einem anderen Webbrowser auf die Website zugreifen. Die betreffende App schlägt jedoch immer noch fehl, ebenso wie curl.

Was muss ich tun, um das zu beheben? Ich kann nicht einfach den unsicheren Modus verwenden, curlda das Problem, das ich zu beheben versuche, die App ist, die nicht auf die Website zugreifen kann. Ich bin mir nicht sicher, welche Bibliothek die App für https verwendet - es kann libcurl sein, aber ich vermute, dass es aus demselben Grund fehlschlägt curl.

Kleiner Nachtrag: Die Open-Source-App verwendet OpenSSL 1.1.1j.

Antworten (1)

OpenSSL unter macOS verwendet nicht den Systemschlüsselbund (was sinnvoll ist, da es sich um eine plattformübergreifende Bibliothek handelt), sondern verfügt über eine eigene .pem-Datei, die ihre Stammzertifikate enthält. Obwohl auf meinen Systemen eine neuere Version von OpenSSL mit Homebrew und/oder MacPorts installiert ist, war die systemweite OpenSSL-pem-Datei unter /etc/ssl/cert.pem veraltet und enthielt kein ISRG-Root-X1-Zertifikat.

Die Lösung:

  1. /etc/ssl/cert.pemIn etwas anderes umbenennen . (Ich schlage /etc/ssl/cert.pem.org vor)

  2. Laden Sie die neueste Version cacert.pemvon https://curl.se/docs/caextract.html herunter

  3. Benennen Sie es um incert.pem

  4. Kopieren Sie es nach/etc/ssl/cert.pem

Now curlund jede andere App, die OpenSSL verwendet, kann auf Websites zugreifen, die mit aktuellen Let's Encrypt-Zertifikaten signiert sind.

Alternativ curl-ca-bundleinstalliert das MacPorts-Paket eine PEM-Datei mit ISRG Root X1, /opt/local/etc/openssl/cert.pemdie ebenfalls verwendet werden kann.

Andere mögliche Lösungen:

  • Fügen Sie das ISRG-Root-X1-Zertifikat manuell zu /etc/ssl/cert.pem hinzu

  • Konfigurieren Sie OpenSSL so, dass eine andere .pem-Datei für seine Stammzertifikate verwendet wird, z/opt/local/etc/openssl/cert.pem

Hübsch. Aber es gibt ein potenzielles Henne-Ei-Problem, weil curl.se ein Zertifikat verwendet, das von der neuen ISRG Root X1 abgeleitet ist, dem Sie anscheinend noch nicht vertrauen. Wenn Sie einen Browser haben, der ihm vertraut , können Sie diesen verwenden; Andernfalls können Sie das Problem umgehen, indem Sie die neue Root-Sammlung herunterladen mit:curl --insecure https://curl.se/ca/cacert.pem -o cert.pem
Glücklicherweise war das kein Problem für mich, da ich nicht nur mit Curl feststecke. Ich habe gerade die neuen Zertifikate mit einem Browser heruntergeladen. Aber wenn jemand in einer Position wäre, in der er Curl mit Curl reparieren müsste, dann ist das ein guter Tipp.
Danke schön. Dies half, nachdem ich 5 verschiedene Lösungen ausprobiert hatte.
Exzellent. Ich habe meine alte .expired statt .org genannt