{"id":1130,"date":"2015-01-09T22:36:25","date_gmt":"2015-01-09T21:36:25","guid":{"rendered":"https:\/\/www.fanjoe.be\/?p=1130"},"modified":"2015-01-17T20:56:14","modified_gmt":"2015-01-17T19:56:14","slug":"nginx-chiffrement-https-et-ssl","status":"publish","type":"post","link":"https:\/\/www.fanjoe.be\/?p=1130","title":{"rendered":"Nginx : Chiffrement HTTPS et SSL"},"content":{"rendered":"<p><a href=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-01.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1131\" src=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-01.jpg\" alt=\"SSL-HTTPS-01\" width=\"620\" height=\"132\" srcset=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-01.jpg 940w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-01-175x37.jpg 175w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-01-300x64.jpg 300w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p>R\u00e9cemment, je me suis int\u00e9ress\u00e9 \u00e0 la mise en place du protocole <a title=\"HTTPS\" href=\"http:\/\/fr.wikipedia.org\/wiki\/HyperText_Transfer_Protocol_Securehttp:\/\/\" target=\"_blank\">HTTPS<\/a> et de sa couche de chiffrement <a title=\"SSL\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Transport_Layer_Security\" target=\"_blank\">SSL<\/a> sur le serveur <a title=\"Nginx\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Nginx\" target=\"_blank\">Nginx<\/a> de mon Raspberry Pi.<br \/>\n<!--more--><br \/>\n<strong>Comment \u00e7a marche ?<\/strong><\/p>\n<p><a href=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-03.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1134\" src=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-03.jpg\" alt=\"SSL-HTTPS-03\" width=\"620\" height=\"285\" srcset=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-03.jpg 750w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-03-175x81.jpg 175w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-03-300x138.jpg 300w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p>La configuration est relativement simple mais la signature des certificats peut poser probl\u00e8me. En effet, ceux-ci peuvent \u00eatres auto-sign\u00e9s ou sign\u00e9s par une autorit\u00e9 de certification reconnue.<\/p>\n<p><strong>Les certificats auto-sign\u00e9s.<\/strong><\/p>\n<p>Ce sont les certificats les plus simples \u00e0 mettre en place. On va les g\u00e9n\u00e9rer nous m\u00eame selon la m\u00e9thode suivante :<\/p>\n<p>On commence par cr\u00e9er un dossier dans lequel on va placer les clefs.<\/p>\n<pre>$ sudo mkdir \/etc\/nginx\/ssl\/\r\n$ cd \/etc\/nginx\/ssl\/<\/pre>\n<p>Puis, on va g\u00e9n\u00e9rer la <span style=\"text-decoration: underline;\"><em>clef priv\u00e9e<\/em><\/span> RSA :<\/p>\n<pre>$ sudo openssl genrsa -des3 -out server.key 2048<\/pre>\n<pre>Generating RSA private key, 2048 bit long modulus\r\n....+++\r\n.......................+++\r\ne is 65537 (0x10001)\r\nEnter pass phrase for server.key:\r\nVerifying - Enter pass phrase for server.key:<\/pre>\n<p>Entrez une phrase (plus longue qu&rsquo;un simple mot de passe) et r\u00e9p\u00e9tez-l\u00e0 pour confirmer.<br \/>\nRien ne s&rsquo;affiche \u00e0 l&rsquo;\u00e9cran lorsque vous tapez. C&rsquo;est normal.<\/p>\n<p>Apr\u00e8s quelques secondes, on obtient le fichier <code>server.key<\/code>.<\/p>\n<p>A partir de la clef priv\u00e9e RSA, on va maintenant g\u00e9n\u00e9rer un <span style=\"text-decoration: underline;\"><em>CSR<\/em><\/span> (Certificate Signing Request).<br \/>\nC-\u00e0-d un formulaire de demande de certificat.<\/p>\n<pre>$ sudo openssl req -new -key server.key -out server.csr<\/pre>\n<p>Ce formulaire contiendra la clef publique g\u00e9n\u00e9r\u00e9e \u00e0 partir de la clef priv\u00e9e ainsi que les informations du site et de son propri\u00e9taire :<\/p>\n<pre>Country Name (2 letter code) [AU]:BE\r\nState or Province Name (full name) [Some-State]:Belgium\r\nLocality Name (eg, city) []:Brussels\r\nOrganization Name (eg, company) [Internet Widgits Pty Ltd]:FanJoe\r\nOrganizational Unit Name (eg, section) []:FanJoe\r\nCommon Name (e.g. server FQDN or YOUR name) []:fanjoe.be\r\nEmail Address []:monmail@monserveurmail.com<\/pre>\n<p>La seule indication importante est votre nom de domaine \u00ab\u00a0<em>Common Name<\/em>\u00ab\u00a0.<\/p>\n<p><code>domaine.tld<\/code> prot\u00e8gera tous les sous-domaines. <code>sousdomaine.domaine.tld<\/code> ne prot\u00e8gera que le sous domaine mentionn\u00e9.<\/p>\n<p>Laissez les \u00ab\u00a0extra attributes\u00a0\u00bb vides.<\/p>\n<p>Voil\u00e0, la demande de certificat <code>server.csr<\/code> est cr\u00e9\u00e9e. Il ne reste plus qu&rsquo;\u00e0 la valider. Normalement, c&rsquo;est une autorit\u00e9 de certification (CA) qui doit signer votre CSR. Elle se porte ainsi garante de l&rsquo;authenticit\u00e9 des donn\u00e9es qui se trouvent dans le certificat. Malheureusement, ce service est souvent payant.<\/p>\n<p>Pour contourner le \u00ab\u00a0probl\u00e8me\u00a0\u00bb, nous allons nous \u00e9riger en CA et signer nous m\u00eame le CSR.<\/p>\n<p>On commence par archiver notre clef priv\u00e9e :<\/p>\n<pre>$ sudo cp server.key server.key.tmp<\/pre>\n<p>Puis, on va d\u00e9crypter la clef priv\u00e9e pour permettre \u00e0 Nginx de s&rsquo;en servir sans avoir besoin du mot de passe :<\/p>\n<pre>$ sudo openssl rsa -in server.key.tmp -out server.key<\/pre>\n<p>On entre la phrase choisie pr\u00e9c\u00e9demment :<\/p>\n<pre>Enter pass phrase for server.key.tmp:\r\nwriting RSA key<\/pre>\n<p>Puis, on signe le CSR avec notre nouvelle clef priv\u00e9e d\u00e9crypt\u00e9e :<\/p>\n<pre>$ sudo openssl x509 -req -days 1000 -in server.csr -signkey server.key -out server.crt<\/pre>\n<p>Et on obtient notre <em><span style=\"text-decoration: underline;\">certificat sign\u00e9<\/span><\/em> : <code>server.crt<\/code><\/p>\n<pre>Signature ok\r\nsubject=\/C=BE\/ST=Belgium\/L=Brussels\/O=FanJoe\/OU=FanJoe\/CN=fanjoe.be\/emailAddress=monmail@monserveurmail.com\r\nGetting Private key<\/pre>\n<p>Il ne reste plus qu&rsquo;\u00e0 \u00e9diter le fichier de configuration de Nginx pour y int\u00e9grer les param\u00e8tres SSL :<\/p>\n<pre>server {\r\n    listen 443 ssl;\r\n    ssl on;\r\n    ssl_certificate      \/etc\/nginx\/ssl\/server.crt;\r\n    ssl_certificate_key  \/etc\/nginx\/ssl\/server.key;\r\n\r\n    La suite des param\u00e8tres ici\r\n}<\/pre>\n<p>Et on red\u00e9marre Nginx :<\/p>\n<pre>$ sudo service nginx restart<\/pre>\n<p>Si tout s&rsquo;est bien pass\u00e9, Nginx ne devrait pas afficher d&rsquo;erreur.<\/p>\n<p>Lorsque vous vous connecterez \u00e0 votre page, vous obtiendrez ce genre de message :<\/p>\n<p><a href=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-02.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1132\" src=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-02.png\" alt=\"SSL-HTTPS-02\" width=\"620\" height=\"456\" srcset=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-02.png 637w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-02-175x129.png 175w, https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-02-300x221.png 300w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p>C&rsquo;est tout \u00e0 fait normal puisque vous vous \u00eates port\u00e9 garant de vous m\u00eame en signant vous-m\u00eame le certificat. Ici, Firefox ne peut se r\u00e9f\u00e9rer \u00e0 aucune autorit\u00e9 de certification (CA) de confiance connue et vous pr\u00e9vient. Il suffit alors d&rsquo;indiquer au navigateur que vous consid\u00e9rez le certificat comme valide et de le m\u00e9moriser.<\/p>\n<p>Cette m\u00e9thode est acceptable dans le cas o\u00f9 les personnes qui acc\u00e8dent \u00e0 votre site sont conscientes des raisons de l&rsquo;affichage de ce message d&rsquo;alerte. Par exemple lorsque vous seul ou des connaissances \u00eates amen\u00e9s \u00e0 vous connecter au site.<\/p>\n<p>Par contre, si le public vis\u00e9 est le commun des mortels, il vous faudra passer par une autorit\u00e9 de certification (CA) au risque de voir vos visiteur prendre la poudre d&rsquo;escampette \u00e0 la lecture de la mise en garde affich\u00e9e.<\/p>\n<p><strong>Passer par une autorit\u00e9 de certification.<\/strong><\/p>\n<p>Nous verrons ce point dans un <a title=\"Nginx : Chiffrement HTTPS et SSL via une Autorit\u00e9 de Certification reconnue\" href=\"https:\/\/www.fanjoe.be\/?p=1168\" target=\"_blank\">autre billet<\/a> avec <a title=\"StartSSL\" href=\"https:\/\/www.startssl.com\" target=\"_blank\">www.startssl.com<\/a>.<\/p>\n<p>Dans ce cas, c&rsquo;est une autorit\u00e9 de certification (CA) (ici \u00ab\u00a0StartSSL\u00a0\u00bb), reconnue sur internet pour son s\u00e9rieux, qui se portera garante de l&rsquo;authenticit\u00e9 des donn\u00e9es contenues dans le certificat.<\/p>\n","protected":false},"excerpt":{"rendered":"<p><a href=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/01\/SSL-HTTPS-01.jpg\"><\/a><\/p>\n<p>R\u00e9cemment, je me suis int\u00e9ress\u00e9 \u00e0 la mise en place du protocole <a title=\"HTTPS\" href=\"http:\/\/fr.wikipedia.org\/wiki\/HyperText_Transfer_Protocol_Securehttp:\/\/\" target=\"_blank\">HTTPS<\/a> et de&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[63,10,3,12],"tags":[104,51,103],"class_list":["post-1130","post","type-post","status-publish","format-standard","hentry","category-boulot","category-geek","category-informatique","category-raspberrypi","tag-https","tag-nginx","tag-ssl","end"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/posts\/1130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1130"}],"version-history":[{"count":0,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/posts\/1130\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}