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:

Qualys SSL Labs

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.key
        
                        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

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

Tags: Beast, Crime, FREAK, HeartBleed, Perfect Forward Secrecy, PFS, SSL

Trackback from your site.

Laisser un commentaire