SSL via GNUTLS sur apache2

Plop à tous …

Aujourd’hui j’ai joué a « qui a la plus grosse » config ssl et c’est là que j’ai remarqué que le mod_ssl d’apache ne supportait que les protocoles SSLv3 et TLSv1.0 (le TLSv1.1 est en cours de dev) ce qui donnait un score pitoyable à mon blog sur ssllabs (qui permet d’avoir une idée du niveau de sécurité de l’implémentation ssl/tls d’un serveur web).


(Au passage certaine banques françaises en sont encore au niveau F, donc c’était déjà pas trop mal pour un blog ^^).

Ma configuration pour le mod_ssl ressemblait à ça, avec un certificat gratuit de chez startssl :


   ServerName blog.gaetan-grigis.eu
   DocumentRoot /dossier/de/mon/blog
   SSLEngine on
   SSLProtocol -all +TLSv1
   SSLCipherSuite ALL:-kEDH:-RC2:-MD5:-RC4:-DES
   SSLCertificateFile /dossier/de/cert/blog.crt
   SSLCertificateKeyFile /dossier/de/cert/blog.key
   SSLCertificateChainFile /dossier/de/cert/sub.class1.server.ca.crt
   SSLCACertificateFile /dossier/de/cert/ca.crt
   SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown

Mais bon, si l’on peut faire mieux gratuitement, on ne va pas s’en priver, donc on installe :

apt-get install libapache2-mod-gnutls
a2enmod gnutls

A noter au passage, que gnutls supporte le SNI (utilisation de plusieurs certificat SSL sur une seul et même IP), et le protocole TLSv1.1

et on rajoute la conf :


   ServerName blog.gaetan-grigis.eu
   DocumentRoot /dossier/de/mon/blog
   GnuTLSEnable  on
   GnuTLSCertificateFile /dossier/certificat/gnutls/blog-gnutls.crt
   GnuTLSKeyFile /dossier/certificat//gnutls/blog-gnutls.key
   GnuTLSPriorities NONE:+VERS-TLS1.1:+VERS-TLS1.0:+AES-256-CBC:+DHE-RSA:+RSA:+SHA1:+COMP-NULL:+COMP-DEFLATE

Au passage, on remarque qu’il y a des fichiers en moins entre la config du mod_ssl et celle de gnutls … WTF ?!, en fait on a pas besoin du ca.crt, par contre, il faut concaténer le certificat du site (blog.crt) avec celui de la « chaine » (sub.class1.server.ca.crt).

Ce que l’on peut faire par un simple :

cat blog.crt sub.class1.server.ca.pem > blog-gnutls.crt

On peu lancer un apache2ctl configtest, pour vérifier si la conf est bonne et redémarrer si il n’y a aucun problème.
Pour ma part avec startssl, le format de mon fichier key n’était pas supporté :

GnuTLS: Failed to Import Private Key '/mon/dossier/de/cert/gnutls/blog-gnutls.key': (-207) Base64 unexpected header error.

Il a fallut supprimer la protection par mot de passe de la clé (pas bien :s), que j’ai fait sur le site de startssl, ou que l’on peut faire via la commande openssl.

Et si l’on refait un test, on a un meilleur score :
.

Le but de cet article n’était pas de dénigrer le mod_ssl (le fait que TLSv1.1 et TLSv1.2 ne soit pas encore supporter est juste due à ma version d’openssl de ma debian 6.0), mais juste de présenter le module gnutls (et son utilisation avec des certificats de chez startssl) qui ne semble pas supporter la renégociation et la compression (malgré l’utilisation du mot clé COMP-DEFLATE), mais qui peut supporter l’authentification par clé pgp et plein d’autre truc …

Un peu de doc au passage sur les différents systèmes de chiffrement :

4 réflexions sur « SSL via GNUTLS sur apache2 »

  1. Salut, merci pour le tuto, peux-tu détailler un peu la procédure pour la gestion des certificats avec gnutls et startssl. J’avoue avoir passé plusieurs dessus sans comprendre comment utiliser startssl avec gnutls 🙁

  2. La seule manipulation qui change par rapport a une config ssl classique est la concaténation de votre .crt et du crt de startssl (http://www.startssl.com/certs/)

    et faire un openssl rsa -in certif.key -ou certif.key.nopass et utiliser la key.nopass pour ne plus avoir a entrer le mot de passe lors du lancement du serveur apache (ce qui donnait l’erreur au lancement).

Les commentaires sont fermés.