Configuration du TLS/SSL sur serveur Vapor

Bonjour à tous,

Dans le cadre du défi du mois nous souhaitons chiffrer nos requêtes en https. J’ai donc utiliser Certbot pour générer un certificat associé au nom de domaine utilisé. J’ai redirigé le nom de domaine vers l’adresse IP du serveur Vapor.
Maintenant je bloque sur la configuration de NGINX pour gérer le TLS.

Quelqu’un a t’il déjà mis en place le https sur son serveur Vapor?

Merci d’avance pour votre aide

Bonjour @Quentin

Je suis en train de suivre le cours de Vapor (j’en suis au début…). Mais je peux lire dans la docs Vapor la configuration Nginx et TLS :

https://docs.vapor.codes/2.0/deploy/nginx/

Peut-être que cela peut t’aider à te donner un élément de réponse?
Bon courage.

Merci @Mrt1, j’ai essayé d’intégrer dans le fichier de conf Nginx ce qui est décrit dans la doc mais ensuite je ne peux plus restart Nginx.

Y’a un message d’erreur dans le shell? Lors du restart?

Oui, celui-ci :

Job for nginx.service failed because the control process exited with error code.

See "systemctl status nginx.service" and "journalctl -xe" for details.

systemctl status nginx.service :

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sun 2021-03-07 18:22:09 UTC; 6min ago
     Docs: man:nginx(8)
  Process: 16267 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 15298 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 16361 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)
 Main PID: 15301 (code=exited, status=0/SUCCESS)

Bonsoir,

Apparemment cela vient de ton fichier de conf. (La ligne ExecStartPre indique un problème de conf.)
Essaie de voir le journal avec la commande indiquée « journalctl -xe », en général ça précise le lancement et l’erreur possible.
D’après ce que je peux lire, certbot pose des soucis sur la configuration nginx, il est possible qu’une erreur ce soit glissée dedans.

Sinon, sur le thread suivant, il y a des pistes éventuelles :

2 « J'aime »

Bonsoir @Mrt1,

Merci beaucoup pour ton aide. Je vais regarder ça de plus près.

Salut,

Je viens tous juste de réussir à configurer le ssl sur mon webservice Vapor j’ai cherché un moment.

En fin de compte il faut que tu créer tes certificats (avec let’s encrypt ou certbot si tu as un nom de domaine) ou de façon autosigné.

créer tes dossiers:

mkdir /vapor
mkdir /vapor/certificate

Puis on génère les certificats:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /vapor/certificate/key.pem -out /vapor/certificate/cert.pem

Si tu utilise Nginx tu as plus qu’as modifier tas redirection afin d’utilisé le ssl

server {
listen 443 ssl;

    ssl_certificate /vapor/certificate/cert.pem;
    ssl_certificate_key /vapor/certificate/key.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_stapling on;
    ssl_stapling_verify on;
    add_header Strict-Transport-Security max-age=15768000;
location / {
        proxy_pass http://127.0.0.1:8081;
        proxy_pass_header Server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass_header Server;
        proxy_connect_timeout 3s;
        proxy_read_timeout 10s;
    }
}

Lance ton serveur sur le port 8081 et ca devrait rouler (je suis pas certain de la config Nginx je suis passé par apache moi car je l’utilisé déjà pour un site web et c’est ce serveur qui redirige sur une autre machine)

Sources: Vapor: Deploy → Nginx
Vapor: Advanced → Server

Avec ceci tu devrait pouvoir t’en sortir. Bon courage

2 « J'aime »

Cool merci @nicopicks !

Je te dirai si ça fonctionne, quand j’aurai reçu ma Raspberry Pi pour faire mes tests serveur en local :grinning:

Salut,

Merci beaucoup @nicopicks pour ta réponse détaillée. Je suis en train de suivre tes conseils. Je vous tiens au courant de mes avancées.

Ok tenez moi au courant :grin:, hésitez pas à me corriger sur la config notamment nginx ou j’ai écrit ça sans test

[EDIT]:

J’ai modifié mon premier post car il était erroné.

En gros le but n’est pas d’activé TLS dans le service web mais de le gérer par Nginx. Donc on laisse tourner notre service web en http sur un port choisi dans l’exemple 8081. Mais dans Nginx on écoute sur le port 443 et de la on lui donne nos certificats pour qu’il gère le ssl. Et ensuite on transmet les requêtes via proxy sur le http en port 8081.

PS: Cela marche aussi avec Apache2 si vous êtes plus à l’aise avec mais Vapor nous conseil Nginx

2 « J'aime »

Merci pour les précisions @nicopicks !

[EDIT] : Donc si j’ai bien compris ton fichier de conf, on laisse en http et non en https au niveau du proxy_pass? La connexion entre le service et le proxy est en HTTP, mais la connexion publique avec le serveur est en HTTPS ? C’est ça ?

Exactement, sur le serveur lui même entre Nginx et le webservice la connextion se fera en http par contre pour le client pour se connecter à Nginx cela se fera en https =)

1 « J'aime »

Merci de ta réponse :slight_smile:

1 « J'aime »

Un grand merci à @Mrt1 et @nicopicks pour leur aide!

2 « J'aime »