1. Création d'une clé privée pour le serveur
openssl genrsa -des3 -out server.key 2048
Définir un mot de passe, par exemple : password
2. Génération d'une demande de signature de certificat (CSR)
openssl req -new -key server.key -out server.csr
3. Chargement de Nginx avec support SSL et suppression du mot de passe de la clé
cp server.key server.key.sauvegarde
openssl rsa -in server.key.sauvegarde -out server.key
Saisir le mot de passe précédent : password
4. Signature automatique du certificat pour obtenir le fichier CRT
Days correpsond à la durée de validité en jours :
openssl x509 -req -days 10000 -in server.csr -signkey server.key -out server.crt
5. Déplacmeent des fichiers et configuration
- Déplacer les fichiers de clé dans le dossier
certdu répertoire racine de Nginx. - Configurer un bloc serveur comme suit :
server {
listen 443 ssl;
server_name api.domaine.com;
ssl_certificate cert/server.crt; # chemin du certificat
ssl_certificate_key cert/server.key; # chemin de la clé privée
access_log /var/log/nginx/access-api.log;
error_log /var/log/nginx/error-api.log;
location / {
proxy_set_header Host $host;
proxy_pass https://127.0.0.1:9666/;
}
}
Commandes principales pour générer un certificat
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Génération avec une autorité de certification (CA)
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 3000 -sha1 -extensions v3_req -CA ca.crt -CAkey ca.key -CAserial ca.srl -CAcreateserial -in server.csr -out server.crt
-CA: chemin du certificat de l'autorité de certification-CAkey: chemin de la clé privée de la CA-CAserial: chemin du fichier de numéro de série-CAcreateserial: crée le fichier de numéro de série (nom par défaut :[nom_CA].srl)
Accès HTTPS avec Spring Boot
Lors de l'utilisation d'outils comme Apifox ou Postman pour accéder à un service Spring Boot via Nginx (HTTPS), vous pouvez rencontrer l'erreur suivante :
Error: write EPROTO 66976008:error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER
Cause : Nginx est configuré en HTTPS, mais le service Spring Boot en aval utilise HTTP, ce qui provoque une incompatibilité. Il faut donc configurer Spring Boot en SSL.
Génération d'un certificat pour Spring Boot
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 10000
Définir un mot de passe, par exemple : 123456
Ajouter ensuite la configuration SSL dans le fichier application.yml ou application.properties de Spring Boot avant de redémarrer l'application.