Sécuriser votre site web avec SSL sous Apache
Il y a quelques temps EuroDNS a lancé son offre de certificat SSL, du coup j’en ai profité pour passer le pas à moindre coût et j’ai généré mon certificat signé par GlobalSign.
Alors l’intérêt c’est de vous garantir que vous êtes bien sur kaizeronion.com, ce qui est déjà pas mal 😉
Ensuite, c’est de pouvoir afficher ça:
Quelques étapes ont été nécessaires avant de mettre en place mon certificat, mais rien de bien sorcier. C’est pourquoi j’ai voulu partager ça avec vous. Il existe déjà plusieurs guide en ligne, mais aucun ne couvre tous les aspects en une fois.
Dans un premier temps, j’ai généré mon CSR.
J’ai commencé par créer un dossier pour stocker la clé et le CSR.
sudo mkdir /etc/ssl
Puis j’ai généré la clé en 2048 bits
openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus ..........................++++++ .......++++++ e is 65537 (0x10001) Enter pass phrase for server.key:
openssl rsa -in server.key -out server.key.insecure
mv server.key server.key.secure mv server.key.insecure server.key
Une fois la clé générée, il me reste plus qu’à générer mon CSR
openssl req -new -key server.key -out server.csr
Lors de la création du CSR, vous devez renseigner quelques informations, le plus important est de bien stipuler le nom de domaine auquel vous souhaitez associer votre certificat, ou l’adresse IP public si vous n’avez pas de nom de domaine.
Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:France Locality Name (eg, city) []: Hettange Grande Organization Name (eg, company) [Internet Widgits Pty Ltd]:Kaizer Onion Organizational Unit Name (eg, section) []: Kaizer Onion Common Name (e.g. server FQDN or YOUR name) []: www.kaizeronion.com Email Address []:your_email@kaizeronion.com
Maintenant votre clé ainsi que votre CSR sont dans le dossier /etc/apache2/ssl
Il faut se rendre sur le site de EuroDNS et générer votre certificat en précisant le CSR. Lors de la génération, pour s’assurer que vous être bien le titulaire du domaine en question, on va vous demander de placer une balise header sur votre page d’accueil.
Nous arrivons à la dernière étape, la mise en place du certificat sur votre serveur Apache.
Normalement, vous devriez avoir un fichier de config pour votre site actuel dans le dossier /etc/apache2/sites-available/ qui doit être actif via un lien symbolique dans le dossier /etc/apache2/sites-enabled
Par défaut, vous avez un exemple de configuration SSL dans le fichier default-ssl.conf
vi /etc/apache2/sites-available/default-ssl.conf
ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/server.pem SSLCertificateKeyFile /etc/ssl/server.keySSLOptions +StdEnvVars SSLOptions +StdEnvVars BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
Par rapport à votre fichier de config standard, seul la localisation du certificat ainsi que de sa clé sont ajoutés.
Il vous faudra sans doute ajouter le certificat intermédiaire via la syntaxe suivante:
SSLCertificateChainFile /etc/apache2/ssl/intermediate.pem
Afin de se prémunir des nombreuses vulnérabilités présentent dans SSL (FREAK, Crime, RC4, Heartbleed, Poodle, etc.) je vous conseille de:
– désactiver les cipher SSLv3 et SSLv2 (Poodle)
SSLProtocol All -SSLv2 -SSLv3
– désactiver le support des ciphers RC4 et MD5
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4
– désactiver la compression SSL (Crime Attack)
SSLCompression off
– activer le HTTP Strict Only
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
– activer le Perfect Forward Secrecy
SSLHonorCipherOrder on
Pour éviter de rendre disponible votre site en HTTP, vous devez mettre en place une redirection sur le virtualhost:80
Au final vous devriez obtenir un fichier de configuration comme celui-ci:
ServerName www.kaizeronion.com ServerAlias kaizeronion.com Redirect permanent / https://www.kaizeronion.com ServerSignature Off SSLEngine on DocumentRoot /var/www/kaizeronion ServerName www.kaizeronion.com ServerAlias kaizeronion.com #Security SSLProtocol All -SSLv2 -SSLv3 SSLCompression off SSLHonorCipherOrder on SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4 Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" # Error Log ErrorLog /var/log/apache2/error_log_kaizeronion Customlog /var/log/apache2/access_log_kaizeronion combined SSLCertificateFile /etc/ssl/server.pem SSLCertificateKeyFile /etc/ssl/server.key SSLCertificateChainFile /etc/ssl/intermediate.pem SSLOptions +StdEnvVars SSLOptions +StdEnvVars BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
Il ne vous reste plus qu’à sauvegarder et activer votre fichier de config.
a2ensite default-ssl.conf
Un redémarrage du service est nécessaire pour que les changements soient pris en compte
service apache2 restart
Maintenant, vous allez profiter de votre site web en https. Par acquis de conscience, vous pouvez lancer un test sur Qualys SSL Labs
Beast, Crime, FREAK, HeartBleed, Perfect Forward Secrecy, PFS, SSL