LInux Network Info

Génération d’un certificat SSL multi-domaines

vendredi 24 octobre 2008 par Maxence Fournier

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 :)


Creative
Commons License
Cette création est mise à disposition sous un contrat Creative Commons.


Fichier de configuration openssl.conf pour la génération de certificats

Accueil du site | Contact | Plan du site | Espace privé | Statistiques | visites : 30723

Suivre la vie du site fr  Suivre la vie du site Wiki  Suivre la vie du site Sécurité  Suivre la vie du site Cryptographie   ?

Site réalisé avec SPIP 1.9.2c + ALTERNATIVES

Creative Commons License