Warum wird beim openssl pkcs12-Export ein zusätzliches Root-Anker-Zertifikat hinzugefügt, das Server-Zertifikat unter Mac OS X dupliziert

615
Nick Williams

[Ursprünglich auf Slack Overflow veröffentlicht, der Kommentarthread beklagte sich jedoch über einen unangemessenen Veranstaltungsort.]

Wir arbeiten daran, von StartCom-SSL-Zertifikaten zu Let's Encrypt zu wechseln, und versuchen, es so einzurichten, dass es automatisch mit macOS Server + Apache HTTPD arbeitet. security importMacOS Server akzeptiert vom Kommandozeilen-Tool ( ) aus keine direkten .pemDateien - Sie müssen ihm eine .p12Datei geben, aus der er die .pemin Apache zu konfigurierenden Dateien extrahiert . Ärgerlich und sinnlos, aber damit müssen wir erst einmal leben.

Um diese .p12Datei zu erstellen, müssen Sie diesen Befehl ausführen:

openssl pkcs12 -export \ -inkey /etc/letsencrypt/live/example.com/privkey.pem \ -in /etc/letsencrypt/live/example.com/cert.pem \ -certfile /etc/letsencrypt/live/example.com/chain.pem \ -out /etc/letsencrypt/live/example.com/example.com.p12 

Und hier wird es komisch. Die Ausgabedatei example.com.p12enthält das example.comZertifikat zweimal, gefolgt von dem Zwischenzertifizierungszertifikat Let's Encrypt, gefolgt von dem unnötigen selbstsignierten DST-Root-CA-X3-Ankerzertifikat (das standardmäßig von allen Browsern installiert wurde) und schließlich vom privaten Schlüssel . Das Ergebnis ist, dass der Apache SSL-Handshake das Serverzertifikat zweimal und das CA-Zwischenzertifikat sowie das Stammzertifikat (das nicht gesendet werden sollte) enthält. Dies führt zu Warnungen im Qualys SSL Labs-Tester.

Wir haben nach innen geschaut cert.pemund es enthält nur das Serverzertifikat (und nur einmal). chain.pementhält nur das CA-Zwischenzertifikat (nicht den Root-Anker oder das Server-Zertifikat). privkey.pementhält nur den privaten Schlüssel. So openssl pkcs12 -exportwird das Duplizieren den Zertifikatserver und dann auf den zusätzlichen Schritt gehen die Wurzel Ankerzertifikat aufzublicken und Hinzufügen.

Wenn Sie denselben Befehl unter openSUSE Linux ausführen, enthält die Ausgabedatei .p12nur das Serverzertifikat (einmalig), das CA-Zwischenzertifikat und den privaten Schlüssel. Kein Wurzelanker.

Wir haben folgende Variationen ausprobiert und keinen Unterschied in der Ausgabe gesehen:

openssl pkcs12 -export \ -inkey /etc/letsencrypt/live/example.com/privkey.pem \ -in /etc/letsencrypt/live/example.com/fullchain.pem \ -out /etc/letsencrypt/live/example.com/example.com.p12  openssl pkcs12 -export \ -inkey /etc/letsencrypt/live/example.com/privkey.pem \ -certfile /etc/letsencrypt/live/example.com/fullchain.pem \ -out /etc/letsencrypt/live/example.com/example.com.p12 

Die einzige Möglichkeit, das Verhalten eines verdoppelten Serverzertifikats auf einem Linux-Computer zu duplizieren, besteht darin, Folgendes zu tun (der Root-Anker ist jedoch immer noch nicht enthalten):

openssl pkcs12 -export \ -inkey /etc/letsencrypt/live/example.com/privkey.pem \ -in /etc/letsencrypt/live/example.com/cert.pem \ -certfile /etc/letsencrypt/live/example.com/fullchain.pem \ -out /etc/letsencrypt/live/example.com/example.com.p12 

(Beachten Sie die Verwendung von fullchain.pemanstelle von chain.pemin Verbindung mit der Verwendung von cert.pem....) Es ist absolut sinnvoll, warum das Serverzertifikat dupliziert wird. Dies ist jedoch nicht der Befehl, den wir unter Mac OS X verwenden.

Hast openssl pkcs12 -exportdu eine Idee, wie du hier das Richtige tun kannst?

1
Haben Sie versucht, eine moderne Version von OpenSSL zu installieren und auszuführen (vielleicht über MacPorts oder Homebrew)? Apple hat eine eigene Sicherheitsbibliothek und hat OpenSSL seit langem keine Liebe gezeigt. Spiff vor 6 Jahren 0
Das hatten wir noch nicht versucht. Ich war vorsichtig beim Upgrade von OpenSSL in einer ansonsten funktionierenden Konfiguration, die Sicherheitsprüfungen bestanden hat. `OpenSSL 0.9.8zh 14 Jan 2016` ist jedoch nicht so alt. Nick Williams vor 6 Jahren 0
„In High Sierra hat Apple die SSL-Bibliotheken von OpenSSL 0.9.8zh auf LibreSSL 2.2.7 umgestellt. LibreSSL ist ein Zweig von OpenSSL, der von OpenBSD unterstützt wird. Secure Transport ist Apples eigene API für SSL / TLS, wird jedoch hauptsächlich für Erstanbieter-Software verwendet. LibreSSL dient als SSL-Bibliothek für Software von Drittanbietern. Dies war in keiner WWDC-Sitzung enthalten, wurde aber von Betreibern von High Sierra beobachtet. ”(Https://www.thesslstore.com/blog/crypto-ssl-improvements-high-sierra-ios-11/) Nick Williams vor 6 Jahren 0
`openssl-Version` liefert auf meinem lokalen Computer, auf dem Sierra ausgeführt wird,` OpenSSL 0.9.8zh 14 Jan 2016`, tatsächlich jedoch `LibreSSL 2.2.7` auf dem Server, auf dem dieses Zertifikatskript ausgeführt wird (High Sierra). Also ist das vielleicht ein Fehler in LibreSSL? Ich sollte den Titel und die Tags aktualisieren, aber zuerst werde ich es heute Abend bei beiden testen, um zu sehen, ob das Verhalten anders ist. Nick Williams vor 6 Jahren 0

0 Antworten auf die Frage