Erstellen Sie mit Spring Boot eine HTTPS-fähige Webanwendung. Der Anwendungsserver verwendet Tomcat, das automatisch in die Spring Boot-App eingebettet wird. Das Serverzertifikat verwendet Let's Encrypt, um ein formales Zertifikat zu erstellen, dem im Internet vertraut wird.
Um HTTPS verwenden zu können, muss Ihr Server über das Internet zugreifen können. Daher benötigen Sie einen Domänennamen (FQDN). In meinem Fall verwendet der für den Test verwendete Server das folgende DDNS.
Private MyDNS.JP https://www.mydns.jp/
Open JDK 14.0.1 (※) Spring Boot 4 4.6.2.RELEASE Entwicklungs-PC Windows 10 Pro 1909 Server AWS EC2-Computerabbild Amazon Linux AMI 2018.03.0
Erstellen Sie ein Serverzertifikat, um einen Server über HTTPS zu erstellen. Erstellen Sie zunächst einen Webserver mit EC2 von AWS.
Melden Sie sich mit Tera Term beim Server an. Der Benutzername ist ec2-user und es ist kein Passwort erforderlich. Geben Sie als RSA-Schlüssel die in Schritt 3 heruntergeladene Schlüsseldatei an.
Lassen Sie uns nach dem Anmelden das Paket aktualisieren.
sudo yum -y update
Installieren Sie den Apache HTTP Server.
sudo yum -y install httpd mod_ssl
sudo service httpd start
Machen Sie den Stammordner von Apache für ec2-Benutzer zugänglich.
sudo chown ec2-user /var/www/html/
Rufen Sie zunächst die OpenJDK-Site auf Ihrem PC auf und laden Sie .tar.gz für Linux herunter.
Laden Sie das heruntergeladene openjdk-14.0.1_linux-x64_bin.tar.gz auf Ihren Server hoch. Sie können es hochladen, indem Sie es in Tera Term ziehen und dort ablegen.
Entpacke es.
tar zxvf openjdk-14.0.1_linux-x64_bin.tar.gz
Erstellen Sie /etc/profile.d/env.sh, um den PATH an OpenJDK zu übergeben.
# /etc/profile.d/env.sh
export PATH=/home/ec2-user/jdk-14.0.1/bin:$PATH
Bitte melden Sie sich erneut beim Server an, damit die PATH-Einstellung angewendet wird.
wget -O - 'http://mydns123456:[email protected]/login.html'
Installiere git und socat.
sudo yum -y install git socat
Installieren Sie die automatisierte Shell acme.sh von Let's Encrypt.
git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install
Erstellen Sie ein Zertifikat mit dem folgenden Befehl. (Domainname ist gefälscht)
./acme.sh --issue -d my.domain.jp -w /var/www/html
Packen Sie das generierte Zertifikat im pkcs12-Format.
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
Sie werden aufgefordert, das Kennwort einzugeben. Legen Sie daher das Kennwort fest. Stellen Sie sicher, dass Sie dieses Kennwort so aufzeichnen, wie Sie es in Ihren Spring Boot-Einstellungen benötigen.
/home/ec2-user/my.domain.jp.p12 sollte erstellt worden sein, laden Sie es also herunter. Ich denke, es ist einfach, die SCP-Funktion von Tera Term zu verwenden.
Mit dem oben Gesagten wurde die PKCS12-Datei des Zertifikats von Let's Encrypt erstellt.
Erstellen Sie eine Web-App mit Spring Boot. Hier soll die HTTPS-Konvertierung erläutert werden, sodass die Site selbst sehr einfach ist.
Starten Sie die Spring Tool Suite und wählen Sie "Datei" - "Neu" - "Spring Starter Project".
Abhängigkeiten können nur "Spring Web" sein.
Erstellen Sie eine Beispielseite.
Erstellen Sie 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>
Beschreiben Sie die folgenden Inhalte in 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
Kopieren Sie die vom Server heruntergeladene Datei my.domain.jp.p12 in den Stammordner Ihres Projekts.
Starten Sie die Spring Boot App. Beginnen Sie mit "Ausführen" -> "Ausführen als" -> "Spring Boot App". Da für das Zertifikat der vollqualifizierte Domänenname in DDNS festgelegt ist, wird diese Warnung beim Zugriff mit localhost angezeigt. Wenn Sie die Warnung ignorieren und erzwingen, wird die Seite angezeigt. Hier reicht es jedoch aus, diese Warnung anzuzeigen.
Um die Site auf dem AWS-Server auszuführen, müssen Sie das von Spring Boot erstellte Programm als JAR-Datei hochladen.
Führen Sie in der Spring Tool Suite "Ausführen" -> "Ausführen als" -> "Maven-Installation" aus.
"SampleHTTPS-0.0.1-SNAPSHOT.jar" wird im Ordner "target" erstellt.
Klicken Sie mit der rechten Maustaste auf die Datei → "Anzeigen in" → "System-Explorer", um den Explorer zu öffnen, und ziehen Sie sie per Drag & Drop in den Tera-Begriff.
Sie benötigen außerdem ** my.domain.jp.p12 ** im Projektordner (eine Ebene über dem Ziel). Ziehen Sie es also auf die gleiche Weise in Tera Term, um es hochzuladen.
Wenn Apache auf dem Server ausgeführt wird, wird es gestoppt, da der Port mit der von Spring Boot erstellten App in Konflikt steht.
sudo service httpd stop
sudo chkconfig httpd off
Starten Sie das Java-Programm. Port 443 kann jedoch nicht von ec2-user gebunden werden, also su es vor der Ausführung.
sudo su
java -jar SampleHTTPS-0.0.1-SNAPSHOT.jar
Wenn Sie es starten können, zeigen wir die Site an. Die Seite, die Sie sehen, ist nur Text, aber Sie sehen eine Sperre und Sie können sehen, dass HTTPS aktiviert ist. Wenn Sie sich das Zertifikat ansehen, können Sie sehen, dass das Zertifikat von Let's Encrypt ausgestellt wurde.
Es ist lange her, aber das war's.
SSL (HTTPS) im Frühjahrsstart aktivieren
Lassen Sie uns Official verschlüsseln https://letsencrypt.org/ja/docs/client-options/ Von github von acme.sh https://github.com/acmesh-official/acme.sh
Recommended Posts