Génération et configuration de certificats HTTPS

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 cert du 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.

Étiquettes: OpenSSL nginx HTTPS ssl Spring Boot

Publié le 22 juillet à 15h36