Au départ on se base sur cet article :
http://www.g-loaded.eu/2007/08/10/ssl-enabled-name-based-apache-virtual-hosts-with-mod_gnutls/

il oublie d’indiquer que gnutls-utils est aussi nécessaire :
yum gnutls-utils

le make bloque au moment de générer le rsa :
/usr/bin/certtool --generate-privkey --bits 1024 --outfile rsafile
il semble que cela vienne d’un manque d’entropie, on peut interompre le make, faire ceci :
cd data ; openssl genrsa 512 > rsafile ; cd -
et le reprendre

Par ailleurs la méthode d’éditer directement /etc/httpd/conf/httpd.conf (enfin c’est ce que je crois comprendre) ne prend pas en compte que /etc/httpd/conf.d/ssl.conf est aussi chargé et va entrer en conflit.
Il vaut mieux plutôt donc modifier /etc/httpd/conf.d/ssl.conf

Quelques valeurs de config utiles ici:
http://trac.gnutls.org/cgi-bin/trac.cgi/wiki/BenchmarkingModGnuTLS

GnuTLSEnable on
GnuTLSCertificateFile /etc/apache2/ssl/apache.pem
GnuTLSKeyFile /etc/apache2/ssl/apache.pem
GnuTLSClientCAFile /etc/apache2/ssl/apache.pem
GnuTLSDHFile /etc/apache2/ssl/dh.pem
GnuTLSPriorities NONE:+VERS-TLS1.0:+3DES-CBC:+RSA:+SHA1:+COMP-NULL
GnuTLSClientVerify request
# request
# The client certificate will be requested, but not required. The Certificate will be validated if sent.
# The output of the validation status will be stored in the SSL_CLIENT_VERIFY environment variable
# and can be "SUCCESS", "FAILED" or "NONE".
GnuTLSExportCertificates on

mod_gnutls peut aussi se servir de memcached :
GnuTLSCache memcache "127.0.0.1 server2.example.com server3.example.com"

sudo yum install memcached pour l’installer.
http://www.danga.com/memcached/:
./memcached -d -m 2048 -l 10.0.0.40 -p 11211
# This starts memcached up as a daemon, using 2GB of memory, and listening on IP 10.0.0.40, port 11211

Ensuite on va lancer httpd directement pour voir les erreurs sans devoir fouiller pour dénicher où elles ont pu être logguées :
/usr/sbin/httpd -k start

La liste des options reconnues est courte par rapport à
http://www.outoforder.cc/projects/apache/mod_gnutls/docs/
GnuTLSPriorities n’est pas connu pour préciser comment indiquer les algo autorisé, etc. !
En fait, c’est simple, c’est parceque c’est basé sur la version 0.2 de mod_gnutls qui est très ancienne et à laquelle il manque plein d’options.

Il vaut mieux se baser sur un mod_gnutls plus récent :
Stable: wget http://www.outoforder.cc/downloads/mod_gnutls/mod_gnutls-0.4.3.tar.bz2
ou
Dev: http://www.outoforder.cc/downloads/mod_gnutls/mod_gnutls-0.5.1.tar.bz2
on adaptera les commandes pour les rendre indépendantes de la version (et on a plus de problème avec certtool ??):
cp src/.libs/libmod_gnutls.so /usr/lib/httpd/modules/mod_gnutls.so
cp data/{dh,rsa}file /etc/httpd/conf/

Seulement, seulement, l’un comme l’autre ont besoin de gnutls 2.2.1 et Fedora 7 a seulement le 1.6.3 par défaut 🙁

Fedora 8 n’est pas mieux, et même devel s’arrête à gnutls 2.0 … Il ne reste qu’à installer gnutls 2.2 en développement.
Mais impossible de retirer le package gnutls, puisque Fedora liste 200 autres packages qui en dépendent 🙁
La solution : Installer gnutls dans un répertoire séparé (/usr/local), et le compiler en statique pour que les programmes lié avec ne commencent pas à référencer la version /usr par erreur.
./configure --prefix=/usr/local --disable-shared ; make
sur libtasn1-1.3 et gnutls-2.2.2 devrait permettre cela en théorie.

Oublions cette histoire de compiler en statique, car à l’arrivé cela donne 🙁 :
Cannot load /etc/httpd/modules/mod_gnutls.so into server: /etc/httpd/modules/mod_gnutls.so: cannot restore segment prot after reloc: Permission denied

Pour mémoire sur la manière de compiler en statique:
Sauf que mod_gnutls-0.5.1/configure –prefix=/usr/local continue à échouer dans la vérification de « libgnutls – version >= 2.2.1 » bien qu’il aille le chercher dans /usr/local :
*** Could not run libgnutls test program, checking why..

Testons voir pour essayer de forcer le statique :
export LDFLAGS=-static
./configure –prefix=/usr/local –disable-srp –with-libgnutls-extra-prefix=/usr/local/

Ne marche toujours pas …
unset LDFLAGS

Soyons plus radical:
sudo vim « /usr/local/bin/libgnutls-extra-config »
#gnutls_libs= »-L${exec_prefix}/lib -lgnutls-extra -L${exec_prefix}/lib -lgnutls -L/usr/local/lib -ltasn1 -lgcrypt -lgpg-error  »
gnutls_libs= »${exec_prefix}/lib/libgnutls-extra.a ${exec_prefix}/lib/libgnutls.a /usr/local/lib/libtasn1.a -lgcrypt -lgpg-error -lz »
./configure –prefix=/usr/local –disable-srp
PS: less config.log nous a aidé à voir que « -lz » était du coup nécessaire

Nous essayons donc une autre méthode pour que notre librairie dynamique aille chercher ses dépendances proprement :
sudo vim "/usr/local/bin/libgnutls-extra-config"
#gnutls_libs="-L${exec_prefix}/lib -lgnutls-extra -L${exec_prefix}/lib -lgnutls -L/usr/local/lib -ltasn1 -lgcrypt -lgpg-error "
gnutls_libs="-Wl,-rpath -Wl,${exec_prefix}/lib -L${exec_prefix}/lib -lgnutls-extra -L${exec_prefix}/lib -lgnutls -L/usr/local/lib -ltasn1 -lgcrypt -lgpg-error "
./configure --prefix=/usr/local --disable-srp

PS: Pour Virtual PC et Fedora Core le fix ultime : « vesa i8042.noloop psmouse.proto=imps clock=pit vga=771 ». Ajouter le 3 à la fin pour booter en mode texte.