[JAVA] Aktivieren Sie HTTPS in WebSphere Liberty

Was du machen willst

Es schien wichtig zu sein, meine eigene Webanwendung in HTTPS zu konvertieren, als ich versuchte, sie auf Googles Lighthouse auszuführen, also Liberty Ich habe die Methode der Verwendung von HTTPS ausprobiert.

SAN erforderlich

Ich dachte, es wäre nicht schwierig, weil ich ein selbstsigniertes Zertifikat für die HTTPS-Kommunikation verwenden könnte, aber in der Vergangenheit war es in Ordnung, wenn der Common Name (CN) festgelegt wurde, aber seit Chrome 58 ist das Zertifikat Subject Alternative. Da der Name (SAN) registriert sein muss, muss ein Zertifikat erstellt werden, das das SAN enthält. スクリーンショット 2019-05-01 17.56.12.png

Versuchte Umgebung

Was passiert mit dem standardmäßig generierten Zertifikat?

Wenn Sie WebSphere Liberty mit aktivierter Funktion ssl-1.0 starten, wird eine Datei mit dem Namen "key.p12" in "user / servers / (Servername) / resources / security" generiert. Diese Datei hat das Format PKCS12 und enthält den privaten Schlüssel und das öffentliche Schlüsselzertifikat. Die Datei hat ein Kennwort und geben Sie das Kennwort im Element "" von "server.xml" an.

Die Methode zum Überprüfen des Inhalts lautet wie folgt (das Kennwort wird durch "" angegeben). Sie können sehen, dass das Zertifikat mit einem Alias namens default registriert ist.

keytool -v -list -keystore key.p12

Vorgehensweise zum Erstellen eines Zertifikats mit SAN

Beziehen Sie den privaten Schlüssel und erstellen Sie daraus ein Zertifikat mit SAN. Es scheint, dass der private Schlüssel aus der standardmäßig generierten p12-Datei (später beschrieben) extrahiert werden kann, aber hier werde ich ihn von Grund auf neu erstellen. Bei iTerm.app habe ich Terminal.app verwendet, da die Tastatureingabe nicht funktioniert, wenn beim Ausführen des Befehls openssl das Kennwort angefordert wird.

#Erstellen Sie einen privaten Schlüssel
openssl genrsa 2048 > default.key

# Certificate Signing Request(CSR,Zertifikatsignierungsanforderung)Erschaffen
#Sie werden nach dem Ländernamen usw. gefragt. Zumindest gebräuchlicher Name(CN)Muss localhost sein
openssl req -new -key default.key > default.csr

#Erstellen Sie eine Eingabedatei, sodass das SAN localhost ist
echo subjectAltName=DNS:localhost > default-san.ext

#Erstellen Sie ein Zertifikat
openssl x509 -days 3650 -sha256 -req -signkey default.key < default.csr > default.crt -extfile default-san.ext

#Erstellen Sie einen Keystore im PKCS12-Format
openssl pkcs12 -export -in default.crt -inkey default.key -out default.p12 -name default

#Stellen Sie sicher, dass der alternative Name des Betreffs im Zertifikat in der erstellten p12-Datei enthalten ist.
keytool -v -list -keystore default.p12 -storetype pkcs12

Registrieren Sie das Zertifikat im Mac-Schlüsselbund

Starten Sie Keychain Access.app und öffnen Sie "Login" und "Certificate" im linken Bereich. Eine Liste der Zertifikate wird im rechten Bereich angezeigt. Fügen Sie default.crt hinzu, das im obigen Verfahren durch Ziehen und Ablegen erstellt wurde. Ändern Sie nach dem Hinzufügen den SSL-Teil in "Immer vertrauen".

スクリーンショット 2019-05-01 17.58.00.png

Wenn Sie mit Chrome erneut darauf zugreifen, können Sie bei Verwendung eines selbstsignierten Zertifikats ohne Warnmeldung darauf zugreifen. スクリーンショット 2019-05-01 19.36.31.png

Referenz

So rufen Sie einen privaten Schlüssel und ein Zertifikat aus der p12-Datei ab

Sie können es mit dem folgenden Befehl abrufen. Wie oben erwähnt, funktioniert iTerm.app nicht für die Passworteingabe, daher habe ich Terminal.app verwendet.

#Nehmen Sie den privaten Schlüssel heraus
openssl pkcs12 -in key.p12 -nocerts -nodes -out privatekey
#Nehmen Sie das Zertifikat heraus
openssl pkcs12 -in key.p12 -clcerts -nokeys -out default2.crt

p12 oder jks

Ich dachte, dass es in der Vergangenheit ein jks-Format anstelle von p12 war. Als ich mir das Thema Open Liberty ansah, hat es sich möglicherweise von 19.0.0.3 geändert. Es scheint, dass p12 allgemein empfohlen wird.

Recommended Posts

Aktivieren Sie HTTPS in WebSphere Liberty
Aktivieren Sie Openjdk10 und Maven unter CentOS
Aktivieren Sie Java 8- und Java 11-SDKs unter Ubuntu