Outils personnels
Vous êtes ici : Accueil GNU / Linux Debian Créer un certificat SSL multi-domaines
Actions sur le document
  • Send this page to somebody
  • Print this page
  • Add Bookmarklet

Créer un certificat SSL multi-domaines

Par Pierre-Yves Landuré - Dernière modification 19/12/2012 22:04

Si vous administrez un serveur web avec de multiple domaines virtuels, vous avez sans doute été confronté à la problématique de la création de certificat SSL valide pour plusieurs domaines. Ce guide n'a pas pour but de vous expliquer la théorie des certificats SSL, mais de vous aider à créer des certificats valides pour plusieurs domaines. Il a été écrit pour fonctionner sur Debian 4.0 Etch.

Ce guide est obsolète. Utilisez la nouvelle version sur le Help Desk Biapy:

Créer un certificat SSL / TLS sur Debian

Présentation de la technologie SSL

Le certificat SSL

Un certificat SSL est composé de deux éléments:

  • Une "clef" privée que seule la personne ayant créé le certificat possède. Cette clef doit être protégée du vol ! Si quelqu'un en fait une copie, il peut dupliquer votre site, et duper les internautes.
  • Une "clef" publique que tout le monde peut télécharger.

La méthode de fonctionnement du cryptage SSL est simple:

  • Lorsque le contenu est chiffré à l'aide de la clef privée, seule la clef publique peut le décoder: Certitude que le contenu a été créé par le propriétaire du certificat.
  • Lorsque le contenu est chiffré à l'aide de la clef publique, seule la clef privé peut le décoder: Certitude que le contenu ne peut être lu que par le propriétaire du certificat.

Les autorités de certification

Il existe un type particulier de certificat SSL que l'on appelle autorité de certification.

Les autorités de certification vérifie que la personne ayant créé un certificat SSL pour un domaine est bien le propriétaire du domaine. Une fois l'identité du créateur vérifiée, l'autorité de certification signe le certificat serveur à l'aide de sa clef privée.

Les systèmes d'exploitations et navigateurs Web disposent des clefs publiques des autorités de certification. Il leur est ainsi possible de contrôler les certificats SSL des sites Web et autres serveurs.

Quelle autorité de certification pour quel besoin

  • Vous disposez d'un serveur Internet d'entreprise: vous devez utiliser une autorité de certification payante. Personnellement, je vous propose Trustico qui fournit des certificats à des coûts très abordables.
  • Vous disposez d'un serveur Internet personnel: vous pouvez utiliser l'autorité de certification gratuite CACert.
  • Vous disposez d'un serveur Intranet: vous devez créer votre propre autorité de certification (voir plus bas dans cette page).

Mise en place de l'environnement

En premier lieu, nous installons les outils de création des certificats SSL :

command apt-get install openssl

Une fois ceci fait, nous créons un dossier destinés à contenir les certificats nouvellement créé:

command mkdir /etc/openssl

Et nous téléchargeons le script qui nous aidera à créer les certificats et son fichier de configuration:

command wget 'http://howto.landure.fr/gnu-linux/debian-4-0-etch/creer-un-certificat-ssl-multi-domaines/ca_openssl.cnf' \
    --output-document='/etc/openssl/ca_openssl.cnf'
command wget 'http://howto.landure.fr/gnu-linux/debian-4-0-etch/creer-un-certificat-ssl-multi-domaines/cert_manager.sh' \
    --output-document='/etc/openssl/cert_manager.sh'
command chmod +x '/etc/openssl/cert_manager.sh'

Une fois le script installé, nous initialisons l'environnement de création des certificats, c'est à dire les valeurs par défaut que vous allez utiliser le plus fréquemment:

/etc/openssl/cert_manager.sh --init

Le script vous pose alors des questions concernant votre domaine, et votre emplacement géographique.

Important : La description du domaine doit correspondre au nom du propriétaire du certificat ! Sans cela, le certificat ne sera pas accepté par l'autorité de certification. En général, il s'agit du nom de votre société.

You will now be asked to give informations for your certificate authority.
Description du domaine [défaut : My Company]: Nom de société
Code de votre pays [défaut : FR]: 
Nom de votre région [défaut : Ile de France]: 
Nom de votre ville [défaut : Paris]: 
Nom de votre domaine [défaut : my-domain.com]: landure.fr
Email de l'administrateur [défaut : root@my-domain.com]: none@landure.fr

Une fois ceci fait, vous êtes prêts pour la création de vos certificats.

Création d'un certificat serveur

La création d'un certificat SSL pour un serveur consiste en 3 étapes:

  • La création d'un couple clef privée / clef publique et de la demande de signature de certificat (CSR) associée.
  • L'envoi du CSR à l'autorité de certification choisie.
  • La récupération de la clef publique du certificat signée par l'autorité de certification.

En premier lieu, nous créons nos clefs privée et publique, et la demande de signature associée:

/etc/openssl/cert_manager.sh --generate-csr="www.domaine.fr"

Remarque: www.domaine.fr est utilisé comme préfixe pour les noms des fichiers du certificat. Il est préférable que cette valeur ne contienne ni espace, ni caractères spéciaux.

Vous devez alors saisir les informations de votre certificat. Dans l'exemple ci-dessus, nous créons un certificat dit "wildcard". C'est à dire que ce certificat peut être utilisé pour tous les sous-domaine de votre domaine. Un certificat est dit "wildcard" quand le nom de domaine qu'il protège débute par le caractère '*'. Par exemple : "*.mon-domain.com". Voici comment créer un certificat Rapid SSL Wildcard :

You will now be asked to give informations for your certificate authority.
Description du domaine [défaut : My Company]: Nom de société
Type de serveur [défault : HTTP server]: HTTPS server
Code de votre pays [défaut : FR]: 
Nom de votre région [défaut : Ile de France]: 
Nom de votre ville [défaut : Paris]: 
Email de l'administrateur [défaut : root@my-domain.com]: 
Nom de votre domaine [défaut : my-domain.com]: *.my-domain.com
Noms de domaines supplémentaires, un par ligne. Finissez par une ligne vide.
SubjectAltName: DNS:

Remarque: Comme vous pouvez le voir, cet outil vous donne la possibilité de générer des certificats valides pour plusieurs noms de domaines. Pour ce faire, il suffit de les saisir dans les SubjectAltName. Cette méthode est intéressante si votre serveur HTTP ne dispose que d'une seule adresse IP, et désert plusieurs noms de domaines, mais la signature de certificats wildcard multidomaines coûte cher. Voici un exemple de domaines supplémentaires pouvant être utilisé pour créer un certificat Power Server ID Wildcard :

SubjectAltName: DNS:*.my-other-domain.com
SubjectAltName: DNS:*.some-more-domain.com

A la fin de la procédure, l'outil vous affiche la requête créée car vous pouvez, si vous le souhaitez :

Vous pouvez aussi choisir de le signer avec votre autorité de certification locale (voir plus bas) ou encore par une autorité de certification commerciale.

Votre demande de signature de certificat se compose de deux fichiers:

  • /etc/openssl/PRIVATE_KEYS/www.domaine.fr_key.pem : La clef privée et confidentielle de votre futur certificat.
  • /etc/openssl/CERTIFICATES_REQUESTS/www.domaine.fr_csr.csr : La clef publique non signée de votre futur certificat.

Vous devez fournir le contenu du fichier https_csr.csr à votre autorité de certification. En retour, une fois votre identité vérifiée, celle-ci vous fournira la clef publique signée. Placez-la dans le fichier /etc/openssl/CERTIFICATES/www.domaine.fr_cert.cert.

Votre certificat SSL consiste alors en deux fichiers:

  • /etc/openssl/PRIVATE_KEYS/www.domaine.fr_key.pem : La clef privée et confidentielle de votre certificat.
  • /etc/openssl/CERTIFICATES/www.domaine.fr_cert.cert : La clef publique signée de votre certificat.

Il ne vous reste plus qu'a configurer votre serveur pour utiliser ce certificat.

Mise en place d'une autorité de certification locale

Création de l'autorité de certification locale

Si vous souhaitez signer un certificat destiné à votre réseau local, vous devez créer une autorité de certification pour votre réseau local. Pour ce faire, utilisez la commande:

/etc/openssl/cert_manager.sh --create-ca

Vous disposez à présent du nécessaire pour signer vos propres certificats. Elle consiste en deux fichiers:

  • /etc/openssl/CERTIFICATE_AUTHORITY/ca-key.pem : Votre clef privé. Elle est confidentielle. Conservez-la précieusement.
  • /etc/openssl/CERTIFICATE_AUTHORITY/ca-cert.pem : La clef publique de votre autorité de certification. Ajoutez-la aux navigateurs Internet présent sur votre réseau local afin qu'ils n'affichent pas d'alerte lorsqu'ils accédent à vos serveurs sécurisés.

Signature d'un certificat par l'autorité de certification locale

Si le certificat est destiné à votre réseau local, vous pouvez utiliser votre autorité de certification pour le signer :

/etc/openssl/cert_manager.sh --sign-csr="www.domaine.fr"

Remarque: www.domaine.fr est le même préfixe que celui que vous avez utilisé lors de la création de votre certificat.

Cette commande vous affiche les informations incluses dans la demande de certificat et vous demande si vous acceptez de le signer.

Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y

Votre certificat SSL consiste alors en deux fichiers:

  • /etc/openssl/PRIVATE_KEYS/www.domaine.fr_key.pem : La clef privée et confidentielle de votre certificat.
  • /etc/openssl/CERTIFICATES/www.domaine.fr_cert.cert : La clef publique signée de votre certificat.

Il ne vous reste plus qu'a configurer votre serveur pour utiliser ce certificat.

Pour aller plus loin

Si vous souhaitez aller plus loin avec les certificats SSL, je vous conseille les lectures suivantes :

Remerciements

Attachements

ne marche pas

Posté par tirtaps le 07/10/2008 20:38
cette méthode me paraissait pleine d'espoir pouir créer un unique certificats pour 4 sites en WWW.domain.com.
ça ne marche pas, ne semble être recevable que pour domain.com

de mémoire ca marche

Posté par lwolf le 07/10/2008 21:45
Si tu utilise CACert, il faut d'abord vérifier tous les domaines sur lesquel tu veux créer ton certificat.

Personnellement, j'ai créé un unique certificat pour:

smtp.landure.fr, smtp.landure.org, smtp.landure.com, smtp.landure.net

sans aucun problème. Je pense donc que ton problème vient plus de la validation des domaines que de la création du certificat.

Bon courrage

openssl

Posté par spe6men1 le 28/12/2008 22:18
j'ai un petit problème pour certifié avec mon ca j'obtient un fichier https_cert.cert et non un .pem
j'ai pourtant un ping ok sur toutes mes requetes dns ??
Que dois-je faire ??
merci

je me suis peut etre trompé

Posté par lwolf le 29/12/2008 06:44
Bonjour,

personnellement, je signe mes certificats avec CACERT, je me suis donc peut être trompé sur le nom de fichier pour les certificats auto signés. Je pense que https_cert.cert est le même fichier que celui que je nomme https_cert.pem.

je vérifierai quand j'aurais 5 mn.

Bon courrage

Ajout d'un autre domaine ?

Posté par Loloemr le 19/01/2009 17:56
Bonjour,

est-il possible d'ajouter un autre domaine après avoir généré le certificat multidomaine ou faut-il tout refaire ?

Merci

Lolo

malheureusement,

Posté par lwolf le 19/01/2009 19:12
Il faut tout refaire à partir de l'étape "Création d'un certificat serveur". Je vous conseille d'utiliser des jokers (*) pour limiter le nombre de fois ou vous devez recréer un certificat.

Bon courrage.

authentification vhosts

Posté par survietamine le 02/04/2009 12:02
bonjour et merci pour votre article,
Tout d'abord, il faut préciser que je suis nul en config Apache.
Je suis intéressé par l'inverse des certificats multi-domaines ou wildcards.
Récemment, on a mis en place une architecture PKI rapidement grace aux scripts inclus dans easy-rsa (livré avec OpenVPN).
Notre souhait est d'autoriser l'accès à un virtualhost Apache selon le certificat de l'utilisateur.
On a changé la valeur de SSLCACertificatePath pour chaque vhost vers le dossier contenant les certificats qu'on souhaite autoriser.
En parcourant certains sites comme celui du reverse-proxy Pound, j'ai bien compris que ça vient du protocole HTTPS et son ordre de négociation.
D'ailleurs, ça se vérifie quand je change le port.
Si je mets à l'un des virtualhosts le port 444 au lieu de 443, la restriction par certificat fonctionne et Apache ne crie plus que je n'ai pas de virtualhost déclaré.
Auriez-vous des liens ou astuces à me donner pour authentifier des utilisateurs sur un virtualhost selon leurs certificats un peu comme ce qu'on fait avec un .htaccess mais sans restriction de mot de passe ou IP... ?
Merci.


Configuration Apache

Posté par Lwolf le 02/04/2009 15:39
Bonjour,

il vous manque juste la directive NameVirtualHost pour le port 444 de votre Apache. Il faut autoriser explicitement les virtualhost pour chaque port ouvert de apache.

Je vous invite par ailleurs a vous reporter à un forum comme celui d'apache france (http://apache-france.org) pour obtenir des réponses spécifiques à vos problèmes Apache.

Sincèrement,

re: Configuration Apache

Posté par survietamine le 02/04/2009 16:48
en fait, j'ai bien cette directive NameVirtualHost dans la config.
Mais le problème, c'est que si les 2 virtualhosts sont paramétrés sur le port 443, j'obtiens l'erreur suivante :
[Thu Apr 02 12:25:28 2009] [warn] NameVirtualHost site2.mydomain.tld:443 has no VirtualHosts

Si je change uniquement le port de l'un des virtualhosts, je n'ai plus de warning et aussi j'ai bien la restriction qui fonctionne comme je veux.
J'entends par là que l'accès à site1 n'est possible qu'avec un certificat qui est posé dans le dossier renseigné par SSLCACertificatePath dans le virtualhost.

Bon, j'ai installé un nouveau serveur pour suivre votre tuto au lieu de faire avec easy-rsa.
Merci pour votre réponse.

re: Configuration Apache

Posté par survietamine le 02/04/2009 16:54
remarque, après l'activation du mod SSL sous Lenny, dans /etc/apache2/ports.conf j'ai :
<IfModule mod_ssl.c>
# SSL name based virtual hosts are not yet supported, therefore no
# NameVirtualHost statement here
Listen 443
</IfModule>

C'est donc explicitement précisé les vhosts SSL ne sont pas supportés.
Je ne sais plus quoi faire.
Bon, comme je dispose de plusieurs IP publiques, je vais peut-être choisir la solution de facilité : 1 IP == 1 virtualhost

les virtuals hosts ssl fonctionnent mais ....

Posté par lwolf le 02/04/2009 17:28
Les virtual hosts fonctionnent en SSL, mais tous les virtualhosts utilisent le même certificat, d'où l'intérêt des certificats SSL wildcard présentés dans ce guide.

Bon courrage

résolu

Posté par survietamine le 10/04/2009 13:05
bonjour,
j'ai trouvé une solution pour autoriser l'accès à un virtualhosts selon le certificat présenté.
Il s'agit d'utiliser la directive SSLRequire qui permet l'équivalent des .htaccess

hi

Posté par fatima le 18/05/2011 18:58
salut est ce que vous peuvez me dire comment activer le mose ssl en apache ?????????

mod ssl

Posté par Lone Wolf le 18/05/2011 19:49
Bonjour,

la commande suivante devrait faire l'affaire :

command a2enmod ssl
/etc/init.d/apache2 force-reload

bon courage

config apache multi ip ssl

Posté par <a href="http://www.acheter-certificats-ssl.com">steph</a> le 06/11/2011 21:27
A noter que selon votre configuration serveur et selon le nombre d'IP bénéficiant d'un certificat SSL sur votre serveur vous devrez spécifier l'ip associé dans le vhost:

<VirtualHost XX.XX.XX.XX:443>

domain.com sans sous domaine.

Posté par DisasteR le 15/06/2009 01:58
salut lwolf

j'utilise ton systeme de certificat multi domaine et j'en suis tres content
malheureusement je ne trouve pas de moyen de faire en sorte que le certificat marche a la fois pour
*.domain.com
et
domaine.com

en creant un certificat avec comme domaine *.domaine.com

si je me rends sur domain.com
je me retrouve avec l'erreur suivante :
Le certificat n'est valide que pour *.domain.com

si je cree un certificat en mettant domain.com et *.domaine.com
je me retrouve avec l'erreur :
Le certificat n'est valide que pour domain.com
sur tout mes sous domaine

a croire que le certificat ne prend pas en compte le fait que je mette domain.com puis une wilcard sur ce meme domaine ...?

aurai tu plus d'info la dessus ? et eventuellement une solution ?

domain.com sans sous domaine.

Posté par DisasteR le 15/06/2009 02:11
precisions:

j'utilise ton script pour signer mes certificats

et dailleur quand je signe ceux ci

je ne vois que le premier domaine de la liste dans les details du certificat
affiches lors de la signature de celui ci.

serai-ce de la que viendrais mon probleme ...?

Signature CA avec SubjectAltName

Posté par Laurent VUIBERT le 25/06/2010 14:14
Pour pouvoir signé avec sa clef CA, il faut rajouter la ligne suivante

copy_extensions=copy

en dessous de [ CA_Default ] dans le fichier "/etc/openssl/ca_openssl.cnf" de façon à avoir :

...
[ CA_default ]
copy_extensions = copy
...

Après il faut refaire sa propre clef CA ( c'est le coté pas cool :( )

Refaire le certificat serveur:
et mettre tout les url dans SubjectAltName, même le site de base, à priori apache ou firefox ne n'utilise plus "Nom de votre domaine [défaut : my-domain.com]" quand on signe plusieurs sites

Ex:

Nom de votre domaine [défaut : my-domain.com]: mon-site.com
Noms de domaines supplémentaires, un par ligne. Finissez par une ligne vide.
SubjectAltName: DNS: mon-site.com
SubjectAltName: DNS: *.mon-site.com
SubjectAltName: DNS: encore.com
SubjectAltName: DNS:

puis signé la clef avec le nouveau CA et bien vérifier que les DNS apparaisse bien dans la signature

/etc/openssl/cert_manager.sh --sign-csr=https
...
Netscape CA Revocation Url:
https://www.mon-site.com/ca-crl.pem
X509v3 Subject Alternative Name:
DNS:mon-site.com, DNS:*.mon-site.com
Certificate is to be certified until Jun 25 12:04:12 2011 GMT (365 days)
...

Voilà qui devrais déjà bien aider :)

Signature CA avec SubjectAltName

Posté par macgyver79 le 26/11/2010 10:59
Slt à tous,

C'est pas la mort de tout refaire pour le CA.
Moi sa ma prit 3min a peine pour l'autorité et le certificat serveur.
Par contre le *.ndd.tld voulait pas.
Mais sa marche pépère.
Bonne continuation

BlogBang
Navigation
 

Réalisé avec Plone

Ce site respecte les normes suivantes :

Wikio