[JAVA] Activer HTTPS sur WebSphere Liberty

Chose que tu veux faire

Il m'a semblé essentiel de convertir ma propre application Web en HTTPS lorsque j'ai essayé de l'exécuter sur le [Lighthouse] de Google (https://developers.google.com/web/tools/lighthouse/?hl=ja), donc Liberty J'ai essayé la méthode d'utilisation de HTTPS.

SAN requis

Je pensais que ce ne serait pas difficile car je pourrais utiliser un certificat auto-signé pour la communication HTTPS, mais dans le passé, c'était OK si le nom commun (CN) était défini, mais depuis Chrome 58, le certificat est Subject Alternative. Puisqu'il nécessite que le nom (SAN) soit enregistré, il est nécessaire de créer un certificat qui inclut le SAN. スクリーンショット 2019-05-01 17.56.12.png

Environnement éprouvé

Qu'arrive-t-il au certificat généré par défaut?

Le démarrage de WebSphere Liberty avec la fonction ssl-1.0 activée générera un fichier appelé key.p12 dans ʻuser / servers / (nom-serveur) / resources / security. Ce fichier est au format PKCS12 et contient la clé privée et le certificat de clé publique. Le fichier a un mot de passe et spécifiez le mot de passe dans l'élément deserver.xml`.

La méthode de vérification du contenu est la suivante (le mot de passe est spécifié par «»). Vous pouvez voir que le certificat est enregistré avec un alias appelé default.

keytool -v -list -keystore key.p12

Procédure de création d'un certificat avec SAN

Obtenez la clé privée et créez un certificat avec SAN à partir de celle-ci. Il semble que la clé privée puisse être extraite du fichier p12 généré par défaut (décrit plus loin), mais ici je vais la créer à partir de zéro. Avec iTerm.app, j'ai utilisé Terminal.app car la saisie au clavier ne fonctionne pas lorsque le mot de passe est demandé lors de l'exécution de la commande openssl.

#Créer une clé privée
openssl genrsa 2048 > default.key

# Certificate Signing Request(CSR,Demande de signature de certificat)Créer
#Il vous sera demandé le nom du pays, etc. Au moins un nom commun(CN)Doit être localhost
openssl req -new -key default.key > default.csr

#Créez un fichier d'entrée pour que le SAN soit localhost
echo subjectAltName=DNS:localhost > default-san.ext

#Créer un certificat
openssl x509 -days 3650 -sha256 -req -signkey default.key < default.csr > default.crt -extfile default-san.ext

#Créer un keystore au format PKCS12
openssl pkcs12 -export -in default.crt -inkey default.key -out default.p12 -name default

#Confirmez que le nom alternatif du sujet est inclus dans le certificat dans le fichier p12 créé.
keytool -v -list -keystore default.p12 -storetype pkcs12

Enregistrez le certificat dans le trousseau Mac

Démarrez Keychain Access.app et ouvrez "Connexion" et "Certificat" dans le volet gauche. Une liste de certificats s'affichera dans le volet droit. Ajoutez default.crt créé dans la procédure ci-dessus par glisser-déposer. Après l'ajout, changez la partie SSL en "Toujours faire confiance".

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

Si vous y accédez à nouveau avec Chrome, vous pouvez y accéder sans message d'avertissement lorsque vous utilisez un certificat auto-signé. スクリーンショット 2019-05-01 19.36.31.png

référence

Comment récupérer la clé privée et le certificat à partir du fichier p12

Vous pouvez le récupérer avec la commande suivante. Comme mentionné ci-dessus, iTerm.app ne fonctionne pas pour la saisie de mot de passe, j'ai donc utilisé Terminal.app.

#Retirez la clé privée
openssl pkcs12 -in key.p12 -nocerts -nodes -out privatekey
#Sortez le certificat
openssl pkcs12 -in key.p12 -clcerts -nokeys -out default2.crt

p12 ou jks

Je pensais que c'était le format jks au lieu de p12 dans le passé, donc quand j'ai regardé le problème d'Open Liberty, il a peut-être changé de 19.0.0.3. Il semble que p12 soit généralement recommandé.

Recommended Posts

Activer HTTPS sur WebSphere Liberty
Activer Openjdk10 et maven sur CentOS
Activer les SDK Java 8 et Java 11 sur Ubuntu