Configuration SSL et hôtes virtuels : Certificat multivalué

  1. Configuration SSL et hôtes virtuels (31 mai 2009)
  2. Configuration SSL et hôtes virtuels : Certificat multivalué (30 juillet 2009)

Le premier article reprenait les bases de la configuration SSL, maintenant nous pouvons vraiment nous attacher au cas des hôtes virtuels par nom, c’est à dire sur la même adresse IP.

Serait-il possible d’avoir deux noms de domaine en accompagnement pour le plat du jour ?

Pour établir la connexion SSL, le serveur présente son certificat, celui-ci doit donc être valide pour tous les noms de domaine qu’il représente. L’idée consiste donc à lister les différents domaines dans le certificat.

Ainsi quelque soit l’hôte virtuel contacté, le serveur répond par le même certificat qui est valide pour tous, et la connexion SSL s’établit.

Monsieur est servi !

C’est très simple, les noms de domaines doivent être listés dans une section du fichier de configuration d’openssl (/etc/ssl/openssl.cnf) :

[ALIASES]
DNS.1 = premier.domaine.tls
DNS.2 = second.autre-domaine.tls

Ensuite on lie cette section au champ subjectAltName:

subjectAltName                  = @ALIASES

Ceci de préférence dans la section créée pour le service que nous voulons utiliser sur les deux hôtes virtuels. (section [APACHE] dans l’article précédent.)
La génération et la signature du certificat sont identiques au cas précédent.

openssl req -new -nodes -keyout apache.key.pem -out apache.csr.pem
openssl ca -extensions APACHE -days 3650 \
    -in apache.csr.pem -out apache.cert.pem
openssl x509 -in apache.cert.pem -out apache.stripped.cert.pem

Voila, votre certificat est prêt à être utilisé.

Ici on utilise le champ subjectAltName qui remplace l’habituel champ commonName pour spécifier les noms de domaines. J’ai bien dit remplace ! Le champ commonName est ignoré.

La carte des desserts :

Le dessert du jour : Apache SSL crème d’hôtes virtuels

Pour ce qui est de la configuration d’apache, ne pas oublier d’ajouter la directive NameVirtualHost, sous Debian, cela se passe dans le fichier /etc/apache2/ports.conf.

<IfModule mod_ssl.c>
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    Listen 443
    # well it works with multi-valued certificates anyway :p
    # but with some warnings in the logs...
    NameVirtualHost votre-ip:443
</IfModule>

Ensuite la configuration de chaque hôte virtuel pointe sur le même certificat.
(Note : bien utiliser l’adresse IP dans la directive VirtualHost !)

Ou un café gourmand :

Et bien, le même mécanisme de certificat fonctionne pour le SMTP-TLS avec Postfix.

Pour jabber (j’ai testé sur ejabberd) ça marche aussi ! Mais comme jabber utilise HTTP/HTTPS, rien d’étonnant ici.

Pour imaps, testé sur Dovecot, sans problème.

L’addition s’il vous plait !

Conclusion

Le plus gros du boulot avait été présenté dans le précédent article, et c’est bien dommage d’avoir pris 2 mois avant de détailler cette méthode…

La méthode proposée fonctionne et est assez simple à mettre en place selon moi.

Évidement cela impose de générer un nouveau certificat à chaque ajout d’hôte virtuel à la configuration, mais cela n’arrive pas tous les jours (enfin sur un serveur personnel en tout cas) !
Ensuite, il faudra révoquer l’ancien certificat afin de prévenir les clients que celui ci n’est plus valide, mais ceci sera le sujet du prochain article de ce dossier.

Sources principales

Tous les articles du dossier SSL et hôtes vituels

  1. Configuration SSL et hôtes virtuels (31 mai 2009)
  2. Configuration SSL et hôtes virtuels : Certificat multivalué (30 juillet 2009)