Personal tools
You are here: Home GNU / Linux Debian 4.0 Etch Créer un certificat SSL multi-domaines
Document Actions
  • Send this page to somebody
  • Print this page
  • Add Bookmarklet

Créer un certificat SSL multi-domaines

by Pierre-Yves Landuré last modified 2012-12-19 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

Attachments

ne marche pas

Posted by tirtaps at 2008-10-07 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

Posted by lwolf at 2008-10-07 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

Posted by spe6men1 at 2008-12-28 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é

Posted by lwolf at 2008-12-29 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 ?

Posted by Loloemr at 2009-01-19 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,

Posted by lwolf at 2009-01-19 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

Posted by survietamine at 2009-04-02 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

Posted by Lwolf at 2009-04-02 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

Posted by survietamine at 2009-04-02 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

Posted by survietamine at 2009-04-02 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 ....

Posted by lwolf at 2009-04-02 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

Posted by survietamine at 2009-04-10 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

Posted by fatima at 2011-05-18 18:58
salut est ce que vous peuvez me dire comment activer le mose ssl en apache ?????????

mod ssl

Posted by Lone Wolf at 2011-05-18 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

Posted by <a href="http://www.acheter-certificats-ssl.com">steph</a> at 2011-11-06 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.

Posted by DisasteR at 2009-06-15 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.

Posted by DisasteR at 2009-06-15 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

Posted by Laurent VUIBERT at 2010-06-25 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

Posted by macgyver79 at 2010-11-26 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
 

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards:

Wikio