améliorations sur la config d'un serveur HTTPS
This commit is contained in:
parent
63adcdedfe
commit
61ad9b6d54
68
HowtoSSL.md
68
HowtoSSL.md
|
@ -7,7 +7,8 @@ SSL (*Secure Sockets Layer*) est un protocole de sécurisation des échanges ré
|
|||
Cela se base sur un principe de clé privée et clé publique (certificat) signée par une autorité de certification.
|
||||
On parle désormais de **SSL/TLS** car les normes récentes ont renommé SSL en TLS (*Transport Layer Security*).
|
||||
|
||||
<https://www.openssl.org/docs/>
|
||||
* <https://www.openssl.org/docs/>
|
||||
* <https://wiki.mozilla.org/Security/Server_Side_TLS>
|
||||
|
||||
## Gestion clé privée / certificat
|
||||
|
||||
|
@ -286,6 +287,7 @@ L'avantage de StartSSL est que pour 150 EUR/an, vous pouvez obtenir la validatio
|
|||
|
||||
Plusieurs failles de sécurité ont touché SSL/TLS ou le logiciel OpenSSL ces dernières années,
|
||||
il convient donc de traiter avec attention la question de la configuration au sein des différents logiciels.
|
||||
Nous détaillons ci-dessous quelques failles célèbres, une liste de toutes les failles étant [disponible sur le wiki de Mozilla](https://wiki.mozilla.org/Security/Server_Side_TLS#Attacks_on_SSL_and_TLS).
|
||||
|
||||
#### Faille PODDLE
|
||||
|
||||
|
@ -313,66 +315,60 @@ Debian [a corrigé cette faille en janvier2015](https://security-tracker.debian.
|
|||
|
||||
### Avoir A+ sur SSL LABS
|
||||
|
||||
L'outil https://www.ssllabs.com/ssltest/analyze.html permet d'avoir une note symbolique sur la configuration de son serveur HTTPS.
|
||||
L'outil <https://www.ssllabs.com/ssltest/analyze.html> permet d'avoir une note **symbolique** sur la configuration d'un serveur HTTPS.
|
||||
|
||||
Voici les principaux critères sur une installation classique :
|
||||
Voici quelques critères pour avoir une bonne note :
|
||||
|
||||
- Il faut que le certificat et le certificat intermédiaire soit signé en SHA256, le SHA1 est déprécié ;
|
||||
- la taille de la clé privée est d'au moins 2048 bits (4096 bits est recommandé mais cela impacte les performances) ;
|
||||
- le certificat et le(s) certificat(s) intermédiaire(s) utilisent des fonctions de hashage en SHA-2 (et non plus en SHA-1 qui est déprécié) ;
|
||||
- le serveur HTTPS n'autorise pas l'utilisation d'algorithmes de chiffrement « faibles » avec le client (comme RC4, MD5, etc.) ;
|
||||
- pour implémenter le principe de *Forward Secrecy*, le serveur HTTPS utilise des [paramètres DH (Diffie-Hellman) d'au moins 2048 bits](https://weakdh.org/) (ou 4096 bits si c'est la taille de la clé privée) ;
|
||||
- le serveur HTTPS autorise le protocole TLS 1.2 ;
|
||||
- le serveur HTTPS permet la [réutilisation des sessions SSL](https://vincent.bernat.im/fr/blog/2011-sessions-ssl-rfc5077.html) ;
|
||||
- le serveur HTTPS support l'*OCSP stapling* ;
|
||||
- un entête *Strict-Transport-Security* indique que le site n'est consultable qu'en HTTPS pendant un certain temps.
|
||||
|
||||
Astuce pour StartSSL, le certificat intermédiaire signé en SHA256 est disponible ici : https://www.startssl.com/certs/class1/sha2/pem/sub.class1.server.sha2.ca.pem (class1) ou https://www.startssl.com/certs/class2/sha2/pem/sub.class2.server.sha2.ca.pem (class2)
|
||||
|
||||
- Il faut désactiver les chiffrements dits « faibles », et ajouter un header Strict-Transport-Security pour indiquer que le site n'est consultable qu'en HTTPS.
|
||||
|
||||
- paramètres DH au moins 2048 (impossible en Debian 7/Apache)
|
||||
|
||||
- Activer le cache pour la reprise de session.
|
||||
|
||||
- Avoir un certificat de >=4096 bits, ou un DH de >=4096 bits.
|
||||
|
||||
Générer le dhparam.pem ainsi (attention ça prend un temps fou) :
|
||||
|
||||
~~~
|
||||
# openssl dhparam -out /etc/ssl/dhparam.pem 4096
|
||||
~~~
|
||||
Plus généralement, on utilisera la documentation de référence <https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations> et notamment le [générateur de configuration SSL de Mozilla](https://mozilla.github.io/server-side-tls/ssl-config-generator/).
|
||||
|
||||
|
||||
#### Configuration Apache
|
||||
|
||||
En pratique avec Apache :
|
||||
En pratique avec Apache (sous Debian 8), voici une configuration SSL avancée :
|
||||
|
||||
~~~{.apache}
|
||||
SSLCipherSuite AES128+EECDH:AES128+EDH
|
||||
SSLProtocol All -SSLv2 -SSLv3
|
||||
SSLCipherSuite AES128+EECDH:AES128+EDH
|
||||
SSLHonorCipherOrder On
|
||||
SSLCompression off
|
||||
#Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
|
||||
SSLSessionCache shm:/var/log/apache2/ssl_gcache_data(512000) ???
|
||||
SSLSessionCacheTimeout 600 ???
|
||||
~~~
|
||||
|
||||
Si votre Apache est trop vieux????, mettre le SSLCipherSuite suivant :
|
||||
|
||||
~~~
|
||||
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4
|
||||
SSLSessionTickets off
|
||||
SSLSessionCache shmcb:/var/log/apache2/ssl_sessioncache(10240000)
|
||||
SSLUseStapling yes
|
||||
SSLStaplingReturnResponderErrors off
|
||||
SSLStaplingCache shmcb:/var/log/apache2/ssl_staplingcache(2048000)
|
||||
Header always set Strict-Transport-Security "max-age=2592000"
|
||||
~~~
|
||||
|
||||
#### Configuration Nginx
|
||||
|
||||
|
||||
En pratique avec Nginx :
|
||||
En pratique avec Nginx (sous Debian 8), voici une configuration SSL avancée :
|
||||
|
||||
~~~
|
||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
||||
ssl_prefer_server_ciphers on;
|
||||
ssl_ciphers "AES128+EECDH:AES128+EDH";
|
||||
ssl_prefer_server_ciphers on;
|
||||
ssl_session_tickets off;
|
||||
ssl_session_cache shared:SSL:10m;
|
||||
ssl_session_timeout 1d;
|
||||
ssl_stapling on;
|
||||
ssl_stapling_verify on;
|
||||
add_header Strict-Transport-Security "max-age=2592000";
|
||||
ssl_dhparam /etc/ssl/dhparam.pem;
|
||||
#add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
|
||||
ssl_session_cache shared:SSL:10m; ???
|
||||
~~~
|
||||
|
||||
avec :
|
||||
Note : il faut générer ses propres paramètres Diffie-Hellman ; pour des paramètres de 2048 bits, on fera:
|
||||
|
||||
~~~
|
||||
~~~{.bash}
|
||||
$ openssl dhparam -out /etc/ssl/dhparam.pem 2048
|
||||
~~~
|
||||
|
||||
|
|
Loading…
Reference in New Issue