L'objectif de cet article est de décrire comment configurer Apache correctement pour obtenir un bon niveau de sécurité et pour, en utilisant un certificat de type Gandi, celui-ci soit reconnu sur une grande partie des terminaux, dont Android.
Objectif 1 : A+ aux tests Qualys
Qualys est une société spécialisée en sécurité et elle met à disposition des outils d'analyse de sécurité dont un test d'analyse de la qualité de la sécurité SSL d'un site WEB.
L'url du testeur est la suivante : https://www.ssllabs.com/ssltest
Voici la configuration de mon vhost Apache 2.4 sous Debian 8
SSLEngine on
SSLCertificateFile /var/www/site1/ssl/fichier.crt
SSLCertificateKeyFile /var/www/site1/ssl/fichier.key
SSLCertificateChainFile /var/www/site1/ssl/GandiStandardSSLCA2.pem
# modern configuration, tweak to your needs
SSLProtocol all -SSLv3 -TLSv1
SSLCipherSuite 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:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
SSLHonorCipherOrder on
SSLCompression off
# OCSP Stapling, only in httpd 2.3.3 and later
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
# HSTS (mod_headers is required) (15768000 seconds = 6 months)
Header always set Strict-Transport-Security "max-age=15768000"
Pour d'autres versions d'Apache ou Nginx il existe un générateur pour trouver la bonne configuration :
https://mozilla.github.io/server-side-tls/ssl-config-generator/
Voici ce que ça donne sur le test :
Objectif 2 : faire reconnaître le certificat sous Android
Plusieurs fois avec le certificat SSL de Gandi je me suis retrouvé avec des erreurs de ce type lors de la configuration de la synchronisation caldav sous Android :
Pourtant le certificat devrait être reconnu sans problèmes. Après quelques recheche il s'avère que l'intermédiaire que j'avais récupéré n'était pas complet. Il faut que l'intermédiaire contienne toute la chaîne de certification pour qu'il soit validé complètement.
Vérifier le fichier GandiStandardSSLCA2.pem, il doit contenir deux blocs -----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
Et avec la configuration précédente le certificat devrait être reconnu sans problèmes.
Voilà de quoi satisfaire un bon fonctionnement de nos sites https.