Créez une application Web compatible HTTPS avec Spring Boot. Le serveur d'applications utilise Tomcat, qui est automatiquement intégré dans l'application Spring Boot. Le certificat de serveur utilise Let's Encrypt pour créer un certificat formel approuvé sur Internet.
Pour utiliser HTTPS, votre serveur doit pouvoir accéder à partir d'Internet, vous avez donc besoin d'un nom de domaine (FQDN). Dans mon cas, le serveur utilisé pour le test utilise le DDNS suivant.
MyDNS.JP privé https://www.mydns.jp/
Open JDK 14.0.1 (※) Spring Boot 4 4.6.2.RELEASE Développement PC Windows 10 Pro 1909 Image de machine serveur AWS EC2 Amazon Linux AMI 2018.03.0
Créez un certificat de serveur pour créer un serveur via HTTPS. Tout d'abord, créez un serveur Web à l'aide d'EC2 à partir d'AWS.
Connectez-vous au serveur avec Tera Term. Le nom d'utilisateur est ec2-user et aucun mot de passe n'est requis. En tant que clé RSA, spécifiez le fichier de clé téléchargé à l'étape 3.
Après vous être connecté, mettons à jour le package.
sudo yum -y update
Installez Apache HTTP Server.
sudo yum -y install httpd mod_ssl
sudo service httpd start
Rendez le dossier racine d'Apache accessible à ec2-user.
sudo chown ec2-user /var/www/html/
Tout d'abord, allez sur le site OpenJDK sur votre PC et téléchargez .tar.gz pour Linux.
Téléchargez le fichier openjdk-14.0.1_linux-x64_bin.tar.gz téléchargé sur votre serveur. Vous pouvez le télécharger en le faisant glisser et en le déposant dans Tera Term.
Décompressez-le.
tar zxvf openjdk-14.0.1_linux-x64_bin.tar.gz
Créez /etc/profile.d/env.sh pour transmettre le PATH à OpenJDK.
# /etc/profile.d/env.sh
export PATH=/home/ec2-user/jdk-14.0.1/bin:$PATH
Veuillez vous reconnecter au serveur pour que le paramètre PATH s'applique.
Téléchargez l'adresse du serveur sur DDNS. Dans le cas de MyDNS, vous pouvez télécharger en accédant au site avec wget. Vous devez vous inscrire pour un compte gratuit. Pour plus de détails, veuillez consulter Site MyDNS.
wget -O - 'http://mydns123456:mypassword@www.mydns.jp/login.html'
Les paramètres de groupe de sécurité définis par défaut dans EC2 n'autorisent que SSH. Autorisons HTTP / HTTPS.
Sélectionnez l'instance que vous avez créée dans le volet Instances et cliquez sur le lien Groupe de sécurité (tel que launch-wizard-1). Sélectionnez Modifier la règle entrante, cliquez sur Ajouter une règle et autorisez HTTP et HTTPS de n'importe où.
Installez git et socat.
sudo yum -y install git socat
Installez le shell automatisé acme.sh de Let's Encrypt.
git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install
Créez un certificat avec la commande suivante. (Le nom de domaine est faux)
./acme.sh --issue -d my.domain.jp -w /var/www/html
Emballez le certificat généré au format pkcs12.
openssl pkcs12 -export -in ~/.acme.sh/my.domain.jp/my.domain.jp.cer -inkey ~/.acme.sh/my.domain.jp/my.domain.jp.key -out ~/my.domain.jp.p12
Vous serez invité à entrer le mot de passe, alors définissez le mot de passe. Assurez-vous d'enregistrer ce mot de passe car vous en aurez besoin dans vos paramètres Spring Boot.
/home/ec2-user/my.domain.jp.p12 aurait dû être créé, alors téléchargez-le. Je pense qu'il est facile d'utiliser la fonction SCP de Tera Term.
Avec ce qui précède, le fichier PKCS12 du certificat par Let's Encrypt a été créé.
Créez une application Web avec Spring Boot. Ici, le but est d'expliquer la conversion HTTPS, le site lui-même sera donc très simple.
Démarrez Spring Tool Suite et sélectionnez "Fichier" - "Nouveau" - "Projet Spring Starter".
Les dépendances peuvent être simplement "Spring Web".
Créez une page d'exemple.
Créez src / main / resources / static / index.html.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HTTPS Sample</title>
</head>
<body>
<h1>Let's Encrypt!</h1>
</body>
</html>
Décrivez le contenu suivant dans src / main / resources / application.properties.
server.port=443
server.ssl.key-store=my.domain.jp.p12
server.ssl.key-store-password=MyPassword
server.ssl.keyStoreType=PKCS12
Copiez le fichier my.domain.jp.p12 téléchargé depuis le serveur dans le dossier racine de votre projet.
Lancez l'application Spring Boot. Commencez par "Exécuter" -> "Exécuter en tant que" -> "Spring Boot App". Étant donné que le certificat a le FQDN défini dans DDNS, cet avertissement sera affiché lors de l'accès avec localhost. Si vous ignorez l'avertissement et le forcez, la page sera affichée, mais ici il suffit de voir cet avertissement.
Pour exécuter le site sur le serveur AWS, vous devez télécharger le programme créé par Spring Boot en tant que fichier jar.
Dans Spring Tool Suite, exécutez "Exécuter" -> "Exécuter en tant que" -> "Maven install".
«SampleHTTPS-0.0.1-SNAPSHOT.jar» sera créé dans le dossier «cible».
Cliquez avec le bouton droit sur le fichier → "Afficher dans" → "Explorateur système" pour ouvrir l'Explorateur, puis faites-le glisser et déposez-le dans le Tera Term.
Vous avez également besoin de ** my.domain.jp.p12 ** dans le dossier du projet (un niveau au-dessus de la cible), alors faites-le glisser et déposez-le dans Tera Term de la même manière pour le télécharger.
Si Apache est en cours d'exécution sur le serveur, il s'arrêtera car le port entre en conflit avec l'application créée par Spring Boot.
sudo service httpd stop
sudo chkconfig httpd off
Démarrez le programme java. Cependant, le port 443 ne peut pas être lié par ec2-user, alors faites-le avant de l'exécuter.
sudo su
java -jar SampleHTTPS-0.0.1-SNAPSHOT.jar
Si vous pouvez le démarrer, affichons le site. La page affichée n'est que du texte, mais vous pouvez voir que la marque de verrouillage est affichée et que HTTPS est activé. Si vous regardez le certificat, vous pouvez voir que le certificat a été émis par Let's Encrypt.
Ça fait longtemps, mais c'est tout.
Activer SSL (HTTPS) dans Spring boot
Let's Encrypt Official https://letsencrypt.org/ja/docs/client-options/ Depuis github de acme.sh https://github.com/acmesh-official/acme.sh
Recommended Posts