Génération d’un certificat SSL multi-domaines
vendredi 24 octobre 2008 par Maxence Fournier
Navigation rapide
- Introduction, p1
- I - Pré requis, p1
- II - Préparation de l’arborescence, p1
- III - Création du fichier de configuration openssl.cnf, p1
- III - 1 La section pour le certificat racine, p1
- III - 2 La section pour le certificat serveur, p1
- III - 3 La section Aliases, p1
- III - 4 Les autres sections du fichier de configuration, p1
- IV - Génération du certificat, p1
- V - Intégration du certificat dans les Vhosts d’Apache, p1
Introduction
La problématique : Apache n’est pas capable de gérer plusieurs Common Name pour la même adresse IP pour différents vhost ! Il y a donc deux solutions. La première est qu’Apache est capable de gérer plusieurs certificats pour des domaines différents sur des adresses IP différentes. Pour cela, il faut configurer les vhosts de la façon suivante :
<VirtualHost 192.168.20.1:443>
ServerName test.domain.com
....
SSLEngine on
SSLCertificateFile /PATH_TO_DIRECTORY/certificat1.crt
SSLCertificateKeyFile /PATH_TO_DIRECTORY/certificat1.key
....
<VirtualHost>
<VirtualHost 192.168.20.2:443>
ServerName test2.domain.com
....
SSLEngine on
SSLCertificateFile /PATH_TO_DIRECTORY/certificat2.crt
SSLCertificateKeyFile /PATH_TO_DIRECTORY/certificat2.key
....
<VirtualHost>
Cependant cette technique est contraignante ! D’une part pour chaque nouveau site sécurisé vous devez créer une nouvelle sous-interface et d’autre part effectuer une modification de votre firewall (en fonction de votre configuration).
La seconde solution, plus pratique, est de générer un seul certificat pour l’ensemble des domaines et cela grâce à la directive subjectAltName qui indique au navigateur web de se référer au nom DNS du site (ce qui correspond à la directive apache ServerName).
Cela ne pose aucun problème dans la mesure où Internet Explorer et Mozilla Firefox sont conformes à la RFC 2818. C’est à dire qu’en l’absence de la directive subjectAltName, il évalue la directive Common Name et dans le cas contraire, celle-ci est ignorée.
Pour mettre en place cette solution, il faut mettre en place une infrastructure de type PKI. Le mot peut effrayer mais cela consiste dans notre cas à générer notre propre certificat racine et un certificat serveur. Le certificat racine sera auto-signé et c’est avec ce certificat racine que nous allons signer notre certificat serveur. Lors de la signature le certificat racine signera le certificat serveur pour les noms DNS que vous aurez renseigné dans la directive subjectAltName.
I - Pré requis
Installez le paquet openssl et ses dépendances :
Vérifiez que le module SSL pour Apache est bien activé.
II - Préparation de l’arborescence
Nous allons préparer l’arborescence nécessaire pour la génération des certificats.
Plaçons nous par exemple dans le répertoire /etc/apache2/ssl
Créez l’arborescence :
Le temps de la génération de nos certificats, le répertoire /etc/apache2/ssl ainsi que les répertoires enfants auront les droits suivants :
III - Création du fichier de configuration openssl.cnf
Pour une meilleure compréhension, je vais vous expliquer les directives du fichier séparément. Si vous souhaitez un template complet du fichier de configuration, vous pouvez le télécharger. Ce fichier est joint à la fin de cet article.
III - 1 La section pour le certificat racine
Ci-dessous, cette directive permet de faire référence dans le fichier de configuration à une autorité de certification Root (très utile si on veut gérer plusieurs autorités Root dans le même fichier de configuration).
Nous indiquons au sein de la section CA_default les différents emplacements des fichiers et répertoire de notre Root CA ainsi que diverses contraintes.
Ensuite pour toutes nos autorités Root CA, nous avons les extensions et contraintes suivantes :
III - 2 La section pour le certificat serveur
Nous devons maintenant indiquer les extensions et les contraintes à appliquer lors de la génération de notre certificat serveur.
III - 3 La section Aliases
On définit ici pour quels domaines DNS sera valide le certificat
III - 4 Les autres sections du fichier de configuration
On définit ici les champs obligatoires ou optionnels à renseigner lors de la génération du certificat.
On définit maintenant divers paramètres pour la requête du certificat serveur lors de la génération du certificat SSL.
IV - Génération du certificat
On se place dans le répertoire SSL et on tape les commandes suivantes :
Génération et signature du certificat racine :
Génération d’une requête de certificat serveur avec une paire de clef RSA sur 1024 bits :
Signature du certificat serveur :
N’oubliez pas d’être le plus restrictif possible sur les droits des certificats :
V - Intégration du certificat dans les Vhosts d’Apache
C’est très simple, il suffit de rajouter ces lignes dans chaque Vhosts pour lesquels vous avez renseigné un alias :
Bonne configuration :)
![]()
Cette
création
est mise
à disposition sous un contrat Creative
Commons.
Maxence Fournier
Articles de cet auteur
fr
Wiki
Sécurité
Cryptographie
?

