{"id":2503,"date":"2014-09-25T15:36:47","date_gmt":"2014-09-25T14:36:47","guid":{"rendered":"https:\/\/beufa.net\/?p=2503"},"modified":"2014-09-25T15:36:47","modified_gmt":"2014-09-25T14:36:47","slug":"perfect-forward-secrecy-pour-apache","status":"publish","type":"post","link":"https:\/\/beufa.net\/fr\/blog\/perfect-forward-secrecy-pour-apache\/","title":{"rendered":"Perfect Forward Secrecy pour Apache"},"content":{"rendered":"<p>Lors de l&#8217;utilisation d&#8217;un protocole comme SSL\/TLS pour le chiffrement et la s\u00e9curisation des donn\u00e9es sur des r\u00e9seaux non s\u00fbrs, il est important de garantir la confidentialit\u00e9 totale des communications, m\u00eame en cas de capture du trafic chiffr\u00e9.<\/p>\n<p>TLS n&#8217;est en effet pas un protocole unique, mais une multitude de briques permettant la s\u00e9curisation des \u00e9changes, gr\u00e2ce \u00e0 :<\/p>\n<ul>\n<li>L&#8217;authentification du serveur (et optionnellement du client). On utilise en g\u00e9n\u00e9ral un certificat x509v3 d\u00e9livr\u00e9 par une autorit\u00e9 de certification.<\/li>\n<li>La confidentialit\u00e9 des donn\u00e9es, en utilisant les suites de chiffrement disponibles dans les <em>CipherSpecs<\/em>.<\/li>\n<li>L&#8217;int\u00e9grit\u00e9 des donn\u00e9s, en utilisant des fonctions de hachage disponibles dans les <em>CipherSpecs<\/em>.<\/li>\n<\/ul>\n<p>Un des probl\u00e8mes de TLS est que pour que cela fonctionne, il faut bien un cl\u00e9 master sym\u00e9trique d\u00e9finie dans l&#8217;\u00e9tape <em>client key exchange<\/em>. Heureusement, celle-ci est chiffr\u00e9e par la cl\u00e9 publique du certificat serveur, emp\u00eachant sa lecture par un tiers autre que le serveur.<\/p>\n<p>Un des probl\u00e8mes est que si l&#8217;on r\u00e9cup\u00e8re la cl\u00e9 master et la cl\u00e9 priv\u00e9e du serveur, m\u00eame \u00e0 post\u00e9riori, il est techniquement possible (m\u00eame si cela n&#8217;est pas \u00e0 la port\u00e9 de quiconque !) de d\u00e9chiffrer l&#8217;ensemble d&#8217;une capture du trafic par exemple. On perd ainsi la confidentialit\u00e9 des donn\u00e9es transmises, ce qui n&#8217;est pas acceptable pour un protocole de s\u00e9curisation de donn\u00e9es. Quand <a href=\"http:\/\/blog.cloudflare.com\/answering-the-critical-question-can-you-get-private-ssl-keys-using-heartbleed\/\" target=\"_blank\">on connait les impacts potentiels de la faille HeartBleed<\/a>, on se rend compte que l&#8217;obtention de la cl\u00e9 priv\u00e9e est possible (m\u00eame si encore une fois, cela reste une attaque tr\u00e8s complexe et non garantie, cela reste possible et envisageable).<\/p>\n<p>Afin d&#8217;\u00e9viter cela, nous allons utiliser la propri\u00e9t\u00e9\u00a0<em>Perfect Forward Secrecy,<\/em> qui va faire appel \u00e0 des suites de chiffrement bas\u00e9es sur les \u00e9changes de cl\u00e9 DH (au lieu de RSA) qui ne sont pas faillibles (en th\u00e9orie) \u00e0 ce principe, car les cl\u00e9s \u00e9chang\u00e9es sont \u00e9ph\u00e9m\u00e8res et sign\u00e9es. Cette propri\u00e9t\u00e9 permet d&#8217;\u00e9viter le d\u00e9chiffrement \u00e0 post\u00e9riori d&#8217;une capture, m\u00eame en possession de la cl\u00e9 priv\u00e9e du serveur. <strong>Attention,<\/strong> ceci est vrai si le groupe DH est suffisamment grand et valide, et uniquement sur des communications ant\u00e9rieures \u00e0 l&#8217;obtention de la cl\u00e9 priv\u00e9e.<\/p>\n<p>Il est possible de renforcer ce m\u00e9canisme de <em>Perfect Forward Secrecy<\/em> en utilisant la <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Cryptographie_sur_les_courbes_elliptiques\" target=\"_blank\">cryptographie bas\u00e9e sur des courbes elliptiques<\/a> (ECDHE pour l&#8217;\u00e9change de cl\u00e9s \u00e9ph\u00e9m\u00e8res, et ECDSA pour l&#8217;authentification du serveur), r\u00e9put\u00e9e plus s\u00fbre que la cryptographie par factorisation.<\/p>\n<p>Par exemple, sur le logiciel Apache, on peut utiliser les <em>CipherSuites<\/em> suivantes pour renforcer la s\u00e9curit\u00e9 de nos \u00e9changes bas\u00e9s sur TLS :<\/p>\n<pre class=\"brush:shell\"># Activation du mod_ssl dans Apache\r\nSSLEngine on\r\n\r\n# On d\u00e9sactive SSLv2 et SSLv3 pour n'utiliser que TLS v1.x\r\nSSLProtocol all -SSLv2 -SSLv3\r\n\r\n# Au lieu de pr\u00e9f\u00e9rer les suites du client (m\u00e9canisme par d\u00e9faut), on privil\u00e9gie les suites propos\u00e9es par le serveur\r\nSSLHonorCipherOrder on\r\n\r\n# On propose les suites avec ECDHE, ECDSA uniquement pour PFS\r\nSSLCipherSuite \"EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4\"\r\n \r\n# On autorise les clients non compatibles SNI \u00e0 acc\u00e9der \u00e0 ce vhost\r\nSSLStrictSNIVHostCheck on\r\n\r\n# Certificat, cl\u00e9 et ch\u00eene de certification\r\nSSLCertificateFile      \/etc\/ssl\/certs\/cert_beufa.net.cert\r\nSSLCertificateKeyFile   \/etc\/ssl\/private\/cert_beufa.net.key\r\nSSLCertificateChainFile \/etc\/ssl\/certs\/CAcert_chain.pem\r\n<\/pre>\n<p>Ces options sont bien s\u00fbr \u00e0 activer avec pr\u00e9caution en cas de forte charge sur vos serveurs Apache. En effet, la baisse de performances li\u00e9es \u00e0 l&#8217;usage de la propri\u00e9t\u00e9 <em>Perfect Forward Secrecy<\/em> entra\u00eene des baisses de performances importantes, de l&#8217;ordre de 15% \u00e0 20% en fonction de la longueur des cl\u00e9s et <em>CipherSpecs<\/em> utilis\u00e9s.<\/p>","protected":false},"excerpt":{"rendered":"<p>Lors de l&#8217;utilisation d&#8217;un protocole comme SSL\/TLS pour le chiffrement et la s\u00e9curisation des donn\u00e9es sur des r\u00e9seaux non s\u00fbrs, il est important de garantir&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/beufa.net\/fr\/blog\/perfect-forward-secrecy-pour-apache\/\">Continue reading<span class=\"screen-reader-text\">Perfect Forward Secrecy pour Apache<\/span><\/a><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,25],"tags":[33,80,96,97],"class_list":["post-2503","post","type-post","status-publish","format-standard","hentry","category-linux","category-securite-2","tag-apache","tag-serveur-web","tag-ssl","tag-tls","entry"],"_links":{"self":[{"href":"https:\/\/beufa.net\/fr\/wp-json\/wp\/v2\/posts\/2503","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beufa.net\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beufa.net\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beufa.net\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/beufa.net\/fr\/wp-json\/wp\/v2\/comments?post=2503"}],"version-history":[{"count":2,"href":"https:\/\/beufa.net\/fr\/wp-json\/wp\/v2\/posts\/2503\/revisions"}],"predecessor-version":[{"id":2506,"href":"https:\/\/beufa.net\/fr\/wp-json\/wp\/v2\/posts\/2503\/revisions\/2506"}],"wp:attachment":[{"href":"https:\/\/beufa.net\/fr\/wp-json\/wp\/v2\/media?parent=2503"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beufa.net\/fr\/wp-json\/wp\/v2\/categories?post=2503"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beufa.net\/fr\/wp-json\/wp\/v2\/tags?post=2503"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}