C'est un contenu de niche, mais je suis vraiment dedans.
"Serveur WEB" et "Application client Java" nouvellement créés. Ici, je voudrais tester la connexion HTTPS de l'application client Java au serveur WEB.
Supposons que vous sachiez ce qui suit: Je n'expliquerai pas en particulier.
1.1. Installez openSSL
[Ici] Téléchargez le programme d'installation depuis [] et installez-le. Il semble préférable d'utiliser celui qui correspond au nombre de bits du serveur cible. La version normale / légère est acceptable. [Ici]: http://slproweb.com/products/Win32OpenSSL.html
1.2. Préparation des répertoires / fichiers
Pour plus de simplicité, nous allons créer un certificat avec les paramètres par défaut de openSSL, donc créer un répertoire / fichier fixe. Créez ce qui suit.
1.2.1. Annuaire
1.2.2. Fichier
1.3. Préparation des variables
Les éléments facultatifs sont résumés ci-dessous. Vous pouvez décider librement si nécessaire, mais il y a des restrictions qui doivent être les mêmes, donc je vais clarifier ici. (Un petit point addictif)
Nom de la variable: Description * Enfermé dans '' pour plus de clarté, mais pas réellement requis. 'cakey.pem': nom de fichier de clé privée de l'autorité de certification. 'cacert.pem': nom de fichier de clé publique de l'autorité de certification. 'capassword': mot de passe de l'autorité de certification. «ST»: nom de la région. __ Veuillez noter que vous ne pouvez signer que si l'autorité d'authentification et le serveur sont identiques! __ 'caname': le nom de l'autorité de certification. __ Veuillez noter que vous ne pouvez signer que si l'autorité d'authentification «caname» et le «servername» du serveur sont différents! __ 'sarvername': Le nom du serveur WEB. __ Veuillez noter que vous ne pouvez signer que si l'autorité d'authentification «caname» et le «servername» du serveur sont différents! __ «CN»: le nom de domaine du serveur qui crée le certificat. "localhost" et l'adresse IP sont également acceptables. '.server_keystore': nom du fichier de clés du serveur WEB. 'serverpassword': mot de passe du fichier de clés du serveur WEB 'server.crt': certificat de serveur WEB 'server.x509': certificat de serveur WEB (format X509) 'server.p12': nom du fichier d'échange d'informations personnelles
1.4. Création d'une autorité de certification privée
Créez une paire de clés privée / publique pour l'autorité de certification. La norme est X509 (même ci-dessous)
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 []:
Importez le certificat d'autorité de certification créé en tant qu '«autorité de certification racine de confiance» Java. (Le mot de passe est "changez-le")
keytool -import -file ca/'cacert.pem' -trustcacerts -alias 'caname' -keystore server/cacerts
1.5. Création d'un certificat de serveur
Créez une paire de clés de serveur. (L'algorithme de clé de chiffrement est RSA)
keytool -genkey -keyalg RSA -alias 'servername' -keystore server/'.server_keystore'
Veuillez saisir le mot de passe du fichier de clés:'serverpassword'
Veuillez saisir à nouveau votre nouveau mot de passe:'serverpassword'
Quel est votre nom et prénom?
[Unknown]: 'CN'
Quel est le nom de l'unité organisationnelle?
[Unknown]:
Quel est le nom de l'organisation?
[Unknown]: 'servername'
Quel est le nom de la ville ou de la région?
[Unknown]:
Quel est l'état ou le nom de l'état?
[Unknown]: 'ST'
Quel est le code du pays à deux lettres pour cet appareil?
[Unknown]:
CN=CN, OU=Unknown, O=servername, L=Unknown, ST=ST, C=Voulez-vous vraiment Inconnu?
[Non]:Oui
<servername>Veuillez saisir votre mot de passe clé
(Appuyez sur RETURN s'il est identique au mot de passe du fichier de clés):
Créez une demande de certificat (CSR).
keytool -certreq -alias servername -keystore server/.server_keystore -file server/server.csr
Veuillez saisir le mot de passe du fichier de clés:'serverpassword'
Signez le certificat de serveur à partir de la demande de certificat à l'aide de l'autorité de certification (créée).
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
Ici, si l'erreur suivante apparaît à la fin et qu'un certificat de serveur de 0 octet est créé, il s'agit d'un échec. (Point addictif)
The stateOrProvinceName field needed to be the same in the
CA certificate (ST) and the request (ST)
C'est une restriction que l'autorité de certification et le serveur doivent être dans la même zone, mais parfois l'erreur se produit même dans la même zone __ comme décrit ci-dessus. Dans ce cas, ajoutez "-policy policy_anything" et réexécutez.
openssl ca -keyfile ca/'cakey.pem' -cert ca/'cacert.pem' -in server/server.csr -out server/'server.crt' -policy policy_anything
Créez le certificat au format X509.
openssl x509 -in server/'server.crt' -out server/'server.x509'
Importez dans le magasin de clés. Tout d'abord, importez le certificat de l'autorité de certification
keytool -import -file ca/'cacert.pem' -alias 'caname' -keystore server/'.server_keystore'
Veuillez saisir le mot de passe du fichier de clés:'serverpassword'
propriétaire: CN=CN, O=caname, ST=ST, C=Unknown
Émetteur: CN=CN, O=caname, ST=ST, C=Unknown
Numéro de série: 9310226b2ad5ebe7
Date de début de validité: Fri Apr 28 20:17:20 JST 2017 date de fin: Sun May 28 20:17:20 JST 2017
Empreinte digitale du certificat:
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
Nom de l'algorithme de signature: SHA256withRSA
version: 3
Expansion:
#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
]
]
Faites-vous confiance à ce certificat?[Non]:Oui
Certificat ajouté au keystore
Ensuite, importez le certificat du serveur WEB
keytool -import -file server/'server.x509' -alias 'servername' -keystore server/'.server_keystore'
Veuillez saisir le mot de passe du fichier de clés:'serverpassword'
Certificat ajouté au keystore
Créez un certificat au format PKCS # 12 à partir du fichier de clés.
keytool -importkeystore -srckeystore server/'.server_keystore' -destkeystore server/'server.p12' -deststoretype PKCS12 -srcalias 'servername'
Veuillez saisir le mot de passe du magasin de clés de sortie:'serverpassword'
Veuillez saisir à nouveau votre nouveau mot de passe:'serverpassword'
Veuillez saisir le mot de passe du fichier de clés source:'serverpassword'
2.1. Quoi utiliser
2.2. Modifications
application.yml
server:
ssl:
key-store: 'server.p12'
key-store-password: 'serverpassword'
keyStoreType: PKCS12
keyAlias: tomcat
3.1. Quoi utiliser
3.2. Que faire
Définissez ce qui suit dans l'argument Java VM.
-Djavax.net.ssl.trustStore=(Répertoire arbitraire)/server/cacerts -Djavax.net.ssl.keyStore=(Répertoire arbitraire)/server/'server.p12' -Djavax.net.ssl.keyStorePassword='serverpassword'
Vous devriez maintenant être en mesure de communiquer HTTPS depuis votre application client Java vers votre serveur WEB.
C'était long, mais la procédure de création d'un certificat de serveur est générale. La méthode de réglage des informations d'autorité d'authentification racine approuvées par Java est un peu irrégulière, et je pense que ce sera un travail limité au moment du développement. C'est une tâche simple qui ne nécessite que quelques clics avec un navigateur. .. Si possible, je pense qu'il est plus facile de créer un certificat légitime au lieu d'un certificat auto-signé pendant le développement.