Es ist ein Nischeninhalt, aber ich bin wirklich begeistert.
Neu erstellte "WEB-Server" und "Java-Client-Anwendung". Hier möchte ich die HTTPS-Verbindung von der Java-Client-Anwendung zum WEB-Server testen.
Angenommen, Sie wissen Folgendes: Ich werde nicht besonders erklären.
1.1. Installieren Sie openSSL
[Hier] Laden Sie das Installationsprogramm von [] herunter und installieren Sie es. Es scheint besser, das zu verwenden, das der Anzahl der Bits des Zielservers entspricht. Jede normale / leichte Version ist akzeptabel. [Hier]: http://slproweb.com/products/Win32OpenSSL.html
1.2 Verzeichnis- / Dateivorbereitung
Der Einfachheit halber erstellen wir ein Zertifikat mit den Standardeinstellungen von openSSL. Erstellen Sie daher ein festes Verzeichnis / eine feste Datei. Erstellen Sie Folgendes.
1.2.1. Verzeichnis
1.2.2. Datei
1.3 Variable Vorbereitung
Die optionalen Elemente sind unten zusammengefasst. Sie können nach Bedarf frei entscheiden, aber es gibt Einschränkungen, die gleich sein müssen, daher werde ich hier näher darauf eingehen. (Ein kleiner süchtig machender Punkt)
Variablenname: Beschreibung * Aus Gründen der Übersichtlichkeit in '' eingeschlossen, aber nicht erforderlich. 'cakey.pem': Der Dateiname des privaten Schlüssels der Zertifizierungsstelle. 'cacert.pem': Der Dateiname des öffentlichen Schlüssels der Zertifizierungsstelle. 'capassword': Passwort der Zertifizierungsstelle. 'ST': Regionsname. __ Bitte beachten Sie, dass Sie nur unterschreiben können, wenn die Authentifizierungsstelle und der Server identisch sind! __ __ 'caname': Der Name der Zertifizierungsstelle. __ Bitte beachten Sie, dass Sie nur unterschreiben können, wenn die Authentifizierungsstelle 'caname'und der Servername des Servers' unterschiedlich sind! __ 'sarvername': Der Name des WEB-Servers. __ Bitte beachten Sie, dass Sie nur unterschreiben können, wenn die Authentifizierungsstelle 'caname'und der Servername des Servers' unterschiedlich sind! __ 'CN': Der Domänenname des Servers, für den Sie ein Zertifikat erstellen möchten. "localhost" und IP-Adresse sind ebenfalls akzeptabel. '.server_keystore': Name des WEB-Server-Keystores. 'serverpassword': WEB-Server-Keystore-Passwort 'server.crt': WEB-Serverzertifikat 'server.x509': WEB-Serverzertifikat (X509-Format) 'server.p12': Name der Datei zum Austausch persönlicher Informationen
1.4. Schaffung einer privaten Zertifizierungsstelle
Erstellen Sie ein privates / öffentliches Schlüsselpaar für die Zertifizierungsstelle. Der Standard ist X509 (wie unten)
openssl req -keyout ca/'cakey.pem' -out ca/'cacert.pem' -new -x509
writing new private key to 'ca/cakey.pem'
Enter PEM pass phrase:'capassword'
Verifying - Enter PEM pass phrase:'capassword'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:'ST'
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:'caname'
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:'CN'
Email Address []:
Importieren Sie das erstellte Zertifizierungsstellenzertifikat als Java "Trusted Root Certification Authority". (Passwort ist "ändere es")
keytool -import -file ca/'cacert.pem' -trustcacerts -alias 'caname' -keystore server/cacerts
1.5. Erstellen eines Serverzertifikats
Erstellen Sie ein Serverschlüsselpaar. (Der Verschlüsselungsschlüssel-Algorithmus ist RSA)
keytool -genkey -keyalg RSA -alias 'servername' -keystore server/'.server_keystore'
Bitte geben Sie das Keystore-Passwort ein:'serverpassword'
Bitte geben Sie Ihr neues Passwort erneut ein:'serverpassword'
Wie lautet Ihr Vor- und Nachname?
[Unknown]: 'CN'
Wie lautet der Name der Organisationseinheit?
[Unknown]:
Wie lautet der Name der Organisation?
[Unknown]: 'servername'
Wie heißt die Stadt oder Region?
[Unknown]:
Wie lautet der Staat oder der Name des Staates?
[Unknown]: 'ST'
Wie lautet der aus zwei Buchstaben bestehende Ländercode für dieses Gerät?
[Unknown]:
CN=CN, OU=Unknown, O=servername, L=Unknown, ST=ST, C=Bist du sicher, dass du Unbekannt willst?
[Nein]:Ja
<servername>Bitte geben Sie Ihr Schlüsselpasswort ein
(Drücken Sie RETURN, wenn es mit dem Keystore-Passwort übereinstimmt):
Erstellen Sie eine Zertifikatsanforderung (Certificate Request, CSR).
keytool -certreq -alias servername -keystore server/.server_keystore -file server/server.csr
Bitte geben Sie das Keystore-Passwort ein:'serverpassword'
Signieren Sie das Serverzertifikat von der Zertifikatanforderung mit der (erstellten) Zertifizierungsstelle.
openssl ca -keyfile ca/'cakey.pem' -cert ca/'cacert.pem' -in server/server.csr -out server/'server.crt'
Using configuration from C:/OpenSSL-Win64/bin/openssl.cfg
Enter pass phrase for ca/cakey.pem:'capassword'
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: May 17 02:20:49 2017 GMT
Not After : May 17 02:20:49 2018 GMT
Subject:
countryName = Unknown
stateOrProvinceName = ST
localityName = Unknown
organizationName = servername
organizationalUnitName = Unknown
commonName = CN
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
EE:1E:F6:4B:55:BF:59:4D:B9:A0:20:F7:CE:E9:C8:F0:B3:65:05:02
X509v3 Authority Key Identifier:
keyid:BC:57:86:E6:B0:E0:BE:CA:2D:47:6F:93:13:DE:0B:85:01:7B:DA:67
Certificate is to be certified until May 17 02:20:49 2018 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Wenn am Ende der folgende Fehler auftritt und ein 0-Byte-Serverzertifikat erstellt wird, liegt ein Fehler vor. (Suchtpunkt)
The stateOrProvinceName field needed to be the same in the
CA certificate (ST) and the request (ST)
Es ist eine Einschränkung, dass sich die Zertifizierungsstelle und der Server im selben Bereich befinden müssen, aber manchmal tritt der Fehler sogar im selben Bereich auf __ wie oben beschrieben. Fügen Sie in diesem Fall "-policy policy_anything" hinzu und führen Sie es erneut aus.
openssl ca -keyfile ca/'cakey.pem' -cert ca/'cacert.pem' -in server/server.csr -out server/'server.crt' -policy policy_anything
Erstellen Sie das Zertifikat im X509-Format.
openssl x509 -in server/'server.crt' -out server/'server.x509'
In den Schlüsselspeicher importieren. Importieren Sie zunächst das Zertifikat der Zertifizierungsstelle
keytool -import -file ca/'cacert.pem' -alias 'caname' -keystore server/'.server_keystore'
Bitte geben Sie das Keystore-Passwort ein:'serverpassword'
Inhaber: CN=CN, O=caname, ST=ST, C=Unknown
Der Emittent: CN=CN, O=caname, ST=ST, C=Unknown
Ordnungsnummer: 9310226b2ad5ebe7
Gültigkeitsbeginn: Fri Apr 28 20:17:20 JST 2017 Enddatum: Sun May 28 20:17:20 JST 2017
Zertifikat Fingerabdruck:
MD5: 48:CA:F9:A9:85:88:44:5A:56:F3:9C:3E:16:D6:14:E1
SHA1: 0F:F1:74:E3:C8:C9:0D:7D:3B:43:E0:7D:1A:10:D5:19:5B:72:8D:69
SHA256: D6:C4:E0:78:BA:16:AF:A8:9C:23:51:18:31:E0:38:FC:57:2F:29:9C:BB:B8:3B:F4:83:85:D2:14:98:7D:2C:64
Name des Signaturalgorithmus: SHA256withRSA
Ausführung: 3
Erweiterung:
#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: BC 57 86 E6 B0 E0 BE CA 2D 47 6F 93 13 DE 0B 85 .W......-Go.....
0010: 01 7B DA 67 ...g
]
]
#2: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:2147483647
]
#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: BC 57 86 E6 B0 E0 BE CA 2D 47 6F 93 13 DE 0B 85 .W......-Go.....
0010: 01 7B DA 67 ...g
]
]
Vertrauen Sie diesem Zertifikat?[Nein]:Ja
Zertifikat zum Keystore hinzugefügt
Importieren Sie als Nächstes das Zertifikat des WEB-Servers
keytool -import -file server/'server.x509' -alias 'servername' -keystore server/'.server_keystore'
Bitte geben Sie das Keystore-Passwort ein:'serverpassword'
Zertifikat zum Keystore hinzugefügt
Erstellen Sie ein Zertifikat im PKCS # 12-Format aus dem Keystore.
keytool -importkeystore -srckeystore server/'.server_keystore' -destkeystore server/'server.p12' -deststoretype PKCS12 -srcalias 'servername'
Bitte geben Sie das Passwort des Ausgabeschlüsselspeichers ein:'serverpassword'
Bitte geben Sie Ihr neues Passwort erneut ein:'serverpassword'
Bitte geben Sie das Passwort für den Quell-Keystore ein:'serverpassword'
2.1 Was zu verwenden ist
2.2 Änderungen
application.yml
server:
ssl:
key-store: 'server.p12'
key-store-password: 'serverpassword'
keyStoreType: PKCS12
keyAlias: tomcat
3.1. Was zu verwenden ist
3.2 Was ist zu tun?
Legen Sie im Java VM-Argument Folgendes fest.
-Djavax.net.ssl.trustStore=(Beliebiges Verzeichnis)/server/cacerts -Djavax.net.ssl.keyStore=(Beliebiges Verzeichnis)/server/'server.p12' -Djavax.net.ssl.keyStorePassword='serverpassword'
Sie sollten nun in der Lage sein, HTTPS von Ihrer Java-Client-App an Ihren WEB-Server zu kommunizieren.
Es war eine lange Zeit, aber das Verfahren zum Erstellen eines Serverzertifikats ist allgemein. Die Methode zum Festlegen der von Java vertrauenswürdigen Informationen der Stammauthentifizierungsbehörde ist etwas unregelmäßig, und ich denke, dass dies zum Zeitpunkt der Entwicklung nur eine begrenzte Arbeit sein wird. Es ist eine einfache Aufgabe, die mit einem Browser nur wenige Klicks erfordert. .. Wenn möglich, ist es meiner Meinung nach einfacher, während der Entwicklung ein legitimes Zertifikat anstelle eines selbstsignierten Zertifikats zu erstellen.
Recommended Posts