[JAVA] HTTPS mit Spring Boot und Let's Encrypt

Einführung

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/

Entwicklungsumgebung

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

Serverzertifikat erstellen

Erstellen Sie ein Serverzertifikat, um einen Server über HTTPS zu erstellen. Erstellen Sie zunächst einen Webserver mit EC2 von AWS.

Erstellen Sie einen EC2-Server

  1. Melden Sie sich bei der AWS Console an und wählen Sie EC2 unter Services aus.
  2. Erstellen Sie eine Instanz. Das Amazon-Computer-Image sollte "Amazon Linux AMI 2018.03.0 (HVM), SSD-Volume-Typ" sein. Die Mindestanforderungen sind in Ordnung.
  3. Vergessen Sie nicht, das Schlüsselpaar herunterzuladen, wenn Sie den Server erstellen.

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. qiita0605_1.PNG

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/

OpenJDK-Installation

Rufen Sie zunächst die OpenJDK-Site auf Ihrem PC auf und laden Sie .tar.gz für Linux herunter.

qiita0605_9.PNG

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.

DDNS-Registrierung

wget -O - 'http://mydns123456:[email protected]/login.html'

qiita0605_2.PNG

Im Fall von MyDNS können Sie hochladen, indem Sie mit wget auf die Site zugreifen. Sie müssen sich für ein kostenloses Konto registrieren. Weitere Informationen finden Sie unter MyDNS Site. Zugriffslisteneinstellungen Die in EC2 standardmäßig festgelegten Sicherheitsgruppeneinstellungen erlauben nur SSH. Lassen wir HTTP / HTTPS zu. Wählen Sie die Instanz aus, die Sie im Bereich Instanzen erstellt haben, und klicken Sie auf den Link Sicherheitsgruppe (z. B. Startassistent-1). Wählen Sie Eingehende Regel bearbeiten, klicken Sie auf Regel hinzufügen und lassen Sie HTTP und HTTPS von überall zu. Installieren Sie das Let's Encrypt Tool

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

Zertifikat erstellen

Erstellen Sie ein Zertifikat mit dem folgenden Befehl. (Domainname ist gefälscht)

./acme.sh --issue -d my.domain.jp -w /var/www/html

qiita0605_3.PNG

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.

  1. Wählen Sie in Tera Term "Datei" - "SSH SCP"
  2. Geben Sie my.domain.jp.p12 in From: unten ein.
  3. Wechseln Sie zu: unten zu etwas, das leicht zu verstehen ist, z. B. dem Desktop des Benutzers.
  4. Klicken Sie auf "Empfangen".

Mit dem oben Gesagten wurde die PKCS12-Datei des Zertifikats von Let's Encrypt erstellt.

Erstellen einer Spring Boot App

Erstellen Sie eine Web-App mit Spring Boot. Hier soll die HTTPS-Konvertierung erläutert werden, sodass die Site selbst sehr einfach ist.

Ein Projekt erstellen

Starten Sie die Spring Tool Suite und wählen Sie "Datei" - "Neu" - "Spring Starter Project". qiita0605_4.PNG

Abhängigkeiten können nur "Spring Web" sein.

qiita0605_5.PNG

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>

Aktivieren Sie HTTPS

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.

qiita0605_6.PNG

Lokale Betriebsprüfung

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.

qiita0605_7.PNG

Auf Server hochladen

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.

qiita0605_8.PNG

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.

Starten Sie auf dem Server

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

qiita0605_11.PNG

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.

qiita0605_12.PNG

qiita0605_10.PNG

Es ist lange her, aber das war's.

Referenzierte Site

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

HTTPS mit Spring Boot und Let's Encrypt
Mit Spring Boot herunterladen
Versuchen Sie es mit einem DI-Container mit Laravel und Spring Boot
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Wechseln Sie die Umgebung mit Spring Boot application.properties und @ Profile-Annotation
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Spring Boot mit Spring Security Filter-Einstellungen und Suchtpunkten
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Versuch, SSR Vue.js mit Spring Boot und GraalJS zu verwenden
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Verbinden Sie Spring Boot und Angular typsicher mit OpenAPI Generator
Behandeln Sie die Java 8-Datums- und Uhrzeit-API mit Thymeleaf mit Spring Boot
Implementieren Sie die REST-API mit Spring Boot und JPA (Application Layer).
Implementieren Sie die REST-API mit Spring Boot und JPA (Infrastructure Layer).
Erstellen wir eine einfache API mit EC2 + RDS + Spring Boot ①
Bis INSERT und SELECT für Postgres mit Spring Boot und Thymianblatt
Stellen Sie mit spring boot + spring jpa eine Verbindung zur Datenbank her und führen Sie die CRUD-Operation durch
Implementieren Sie die REST-API mit Spring Boot und JPA (Domain Layer Edition).
Domänengesteuerte Entwicklung mit Java und Spring Boot-Layer und Modulabteilung
Erstellen Sie eine App mit Spring Boot 2
Datenbankverknüpfung mit doma2 (Spring Boot)
Elastische Bohnenstange (Java) + Spring Boot + https
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erhalten Sie Validierungsergebnisse mit Spring Boot
(Intellij) Hallo Welt mit Spring Boot
Erstellen Sie eine App mit Spring Boot
Spring-Profilfunktion und Spring Boot application.properties
Google Cloud Platform mit Spring Boot 2.0.0
Ich habe GraphQL mit Spring Boot ausprobiert
[Java] LINE-Integration mit Spring Boot
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Ich habe Flyway mit Spring Boot ausprobiert
Mit Java verschlüsseln und mit C # entschlüsseln
Die Nachrichtenkooperation begann mit Spring Boot
Einfache Entwicklung von Webanwendungen mit STS und Spring Boot. In 10 Minuten.
Lassen Sie uns mit Spring Boot part3 eine Webanwendung für die Buchverwaltung erstellen
Lassen Sie uns mit Spring Boot part2 eine Webanwendung für die Buchverwaltung erstellen
Vergleiche Hallo Welt! Mit Spring Boot mit Java, Kotlin und Groovy
Stellen Sie sich die Spring Boot-App mit dem Jib-Maven-Plugin vor und starten Sie sie mit Docker
[Anfänger] Versuchen Sie, die REST-API für die Todo-App mit Spring Boot zu schreiben
Verarbeitung beim Starten einer Anwendung mit Spring Boot
Feder mit Kotorin --2 RestController und Datenklasse
Hallo Welt mit Eclipse + Spring Boot + Maven
Senden Sie regelmäßige Benachrichtigungen mit LineNotify + Spring Boot
Probieren wir WebSocket mit Java und Javascript aus!