Création et utilisation des certificats SSL

Ce document explique comment mettre en place votre propre autorité de certification racine (root Certificate Authority ou root CA) à l'aide des outils OpenSSL. En tant qu'autorité de certification racine, vous pourrez signer et installer des certificats utilisables par les applications de vos serveurs Internet, telles qu' Apache ou Stunnel.

Traductions

Si vous vous donnez la peine de traduire ce document dans d'autres langues, veuillez envoyer un lien vers votre traduction à Marcus Redivo, auteur du document original. Il appréciera d'en être informé et les internautes parlant cette langue le seront également.

Sommaire

  1. Portée de ce document
  2. Pour les gens pressés
  3. Contexte
  4. Prérequis
  5. Configuration de départ
  6. Créer un Certificat Racine (Root Certificate)
  7. Créer une Requête de Signature de Certificat (CSR)
  8. Signer un certificat
  9. Installer le certificat et la clé
    1. Apache
    2. Stunnel
  10. Distribuer votre Certificat CA
  11. Renouvellement des Certificats
  12. Obtenir un certificat signé par une CA commerciale
  13. Publier le certificat de votre CA
  14. Résumé
    1. Configuration générale
    2. Par certificat
    3. Par certificat - Renouvellement
  15. Fichier de configuration
  16. Références

1 : Portée de ce document

Ce document couvre un usage limité et spécifique, mais correspondant à un besoin courant : éviter que des navigateurs Internet, clients de messagerie ou autres se plaignent du certificat installé sur votre serveur.

L'utilisation d'une Autorité de Certification (CA) commerciale ne sera pas traité ici. Nous allons choisir de devenir notre propre Autorité de Certification et de signer nos propres certificats.

Les procédures décrites ici ont été mises au point en utilisant OpenSSL 0.9.6 sur Linux le 24 septembre 2000. (NdT : Ces procédures m'ont donné pleine satisfaction avec OpenSSL 0.9.8c-4 sur une Debian GNU/Linux 4.0r0 en mai 2007)

2 : Pour les gens pressés

Ceux qui souhaitent créer des certificats tout de suite sans lire ce document dans son ensemble peuvent consulter directement le résumé présent en fin d'article.

3 : Contexte

Pourquoi devenir notre propre Autorité de Certification Racine (Root CA)? Pour pouvoir tirer parti du chiffrement SSL sans dépenser d'argent inutilement pour obtenir nos certificats signés.

Un inconvénient est que les clients continueront de considérer notre site comme non-certifié jusqu'à ce que notre certificat racine y soit importé. Toutefois, dès que ceci sera fait, il n'y aura plus aucune différence avec une CA commerciale.

Les clients n'importeront notre certificat racine que s'ils ont confiance en nous. C'est là le rôle des CA commerciales : elles proposent de faire des recherches en profondeur sur les gens et les organisations pour qui elles sigent des certificats. Importer leur certificat racine (ce que font actuellent les sociétés éditrices des navigateurs) revient à faire confiance à ces CA commerciales lorsqu'elles garantissent que quelqu'un est bien celui qu'il prétend être. Nous pouvons également faire confiance à d'autres CA racines (comme nous-méme) en important leur certificat CA.

N.B. : Si vous comptez mettre en place un site commercial sécurisé, l'obtention d'un certificat signé par une CA commerciale est le seul choix réaliste.

4 : Prérequis

Vous aurez besoin d'une copie d'OpenSSL afin de mettre en oeuvre ce qui est décrit ici. OpenSSL est probablement fourni en standard dans votre distribution. Si tel n'est pas le cas, vous pouvez l'obtenir depuis http://www.openssl.org. La procédure d'installation d'OpenSSL sort du cadre de ce document.

5 : Configuration de départ

Nous allons tout d'abord créer un répertoire dans lequel nous pourrons travailler. L'emplacement de ce répertoire n'a aucune importance. Je le créerais arbitrairement dans mon répertoire personnel.


# mkdir CA
# cd CA
# mkdir newcerts private

Le répertoire CA contiendra les éléments suivants :

Il nous servira également de répertoire de travail lorsque nous créerons ou que nous signerons des certificats.

Le répertoire CA/newcerts contiendra :

Le répertoire CA/private contiendra :

Cette clé est importante :

La prochaine étape est de créer une base de données pour référencer les certificats que nous allons signer.


# echo '01' > serial
# touch index.txt

Plutôt que d'utiliser le fichier de configuration fourni en standard avec OpenSSL, nous allons créer un fichier de configuration minimal adapté à nos besoins dans le répertoire courant. Lancez votre éditeur favori (vi, pico, ...) et créez un fichier openssl.cnf de base:

#
# OpenSSL configuration file.
#

# Establish working directory.

dir			= .

6 : Créer un Certificat Racine (Root Certificate)

Avec OpenSSL, une grande partie de ce que contient un certificat dépend du contenu du fichier de configuration plus que des options de la ligne de commande. C'est une bonne chose étant donné qu'il y a beaucoup de choses à spécifier.

Le fichier de configuration est divisé en sections, qui sont lues et traitées en fonction des arguments passés sur la ligne de commande. Les sections peuvent inclure une ou plusieurs autres sections en y faisant référence, ce qui augmente la modularité du fichier de configuration. Un nom entre crochets (par exemple [req]) marque le début de chaque section.

Nous allons maintenant ajouter la section définissant la manière dont les certificats seront créés, et une section définissant le type de certificat à créer.

La première chose que nous devons spécifier est le Nom Distinctif (Distinguished Name ou DN). Il s'agit du texte qui identifie le propriétaire du certificat. Il n'est pas référencé directement dans le fichier de configuration, mais inclus dans la section traitée lors de la création des demandes de certificats. Cette section est nommée [req] car la commande utilisée pour créer ces demandes de certificats est openssl req <arguments>.

Ajoutez les lignes suivantes au fichier openssl.cnf :


[ req ]
default_bits		= 1024			# Size of keys
default_keyfile		= key.pem		# name of generated keys
default_md		= md5			# message digest algorithm
string_mask		= nombstr		# permitted characters
distinguished_name	= req_distinguished_name

[ req_distinguished_name ]
# Variable name		  Prompt string
#----------------------	  ----------------------------------
0.organizationName	= Organization Name (company)
organizationalUnitName	= Organizational Unit Name (department, division)
emailAddress		= Email Address
emailAddress_max	= 40
localityName		= Locality Name (city, district)
stateOrProvinceName	= State or Province Name (full name)
countryName		= Country Name (2 letter code)
countryName_min		= 2
countryName_max		= 2
commonName		= Common Name (hostname, IP, or your name)
commonName_max		= 64

# Default values for the above, for consistency and less typing.
# Variable name			  Value
#------------------------------	  ------------------------------
0.organizationName_default	= The Sample Company
localityName_default		= Metropolis
stateOrProvinceName_default	= New York
countryName_default		= US

[ v3_ca ]
basicConstraints	= CA:TRUE
subjectKeyIdentifier	= hash
authorityKeyIdentifier	= keyid:always,issuer:always

Notre certificat de CA sera protégé par une phrase de passe afin d'éviter qu'il soit utilisé sans autorisation. A chaque fois que vous utiliserez votre certificat de CA pour signer une requête, la phrase de passe vous sera demandée. Choisissez donc une phrase de passe non triviale et assurez-vous de ne pas la perdre.

Tout est désormais en place pour créer notre certificat racine auto-signé. Pour cela, nous voulons écraser les valeurs par défaut que nous avons tout juste définies dans le fichier de configuration. Nous allons pour cela fournir ces paramètres sur la ligne de commande.

Voilà le détail des paramètres que nous allons passer à la commande openssl req :

Une note sur la durée de validité des certificats racine : Lorsqu'un certificat racine expire, tous les certificats signés avec ce certificat racine sont invalidés. Pour corriger celà, un nouveau certificat racine doit être créé et distribué. De plus, tous les certificats signés avec le certificat racine périmé doivent être révoqués et signés à nouveau avec le nouveau certificat racine. Comme cela peut demander beaucoup de travail, vous pouvez augmenter la période de validité de votre certificat racine autant que bon vous semble. Le certificat racine créé dans cet exemple est valable 10 ans.

Exécutez la commande suivante. Une nouvelle phrase de passe PEM vous sera alors demandée et vous devrez la saisir deux fois.


# openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem \
-out cacert.pem -days 3650 -config ./openssl.cnf
Using configuration from ./openssl.cnf
Generating a 1024 bit RSA private key
.......++++++
..........................++++++
writing new private key to 'private/cakey.pem'
Enter PEM pass phrase:demo
Verifying password - Enter PEM pass phrase:demo
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Organization Name (company) [The Sample Company]:<enter>
Organizational Unit Name (department, division) []:CA Division
Email Address []:ca@sample.com
Locality Name (city, district) [Metropolis]:<enter>
State or Province Name (full name) [New York]:<enter>
Country Name (2 letter code) [US]:<enter>
Common Name (hostname, IP, or your name) []:TSC Root CA

Ce processus crée deux fichiers de sortie:

Le fichier cacert.pem est le certificat de CA racine que vous devrez distribuer aux clients.

La clé privée (cakey.pem) ressemble à ceci:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,0947F49BB28FE5F4

jlQvt9WdR9Vpg3WQT5+C3HU17bUOwvhp/r0+viMcBUCRW85UqI2BJJKTi1IwQQ4c
tyTrhYJYOP+A6JXt5BzDzZy/B7tjEMDBosPiwH2m4MaP+6wTbi1qR1pFDL3fXYDr
ZsuN08dkbw9ML6LOX5Rl6bIBL3i5hnGiqm338Fl52gNstThv0C/OZhXT3B4qsJn8
qZb3mC6U2nRaP/NpZPcEx4lv2vH7OzHTu1TZ7t0asSpgpuH58dfHPw775kZDep2F
LXA3Oeavg0TLFHkaFBUx2xaeEG6Txpt9I74aAsw1T6UbTSjqgtsK0PHdjPNfPGlY
5U3Do1pnU9hfoem/4RAOe0cCovP/xf6YPBraSFPs4XFfnWwgEtL09ReFqO9T0aSp
5ajLyBOYOBKQ3PCSu1HQDw/OzphInhKxdYg81WBBEfELzSdMFQZgmfGrt5DyyWmq
TADwWtGVvO3pEhO1STmCaNqZQSpSwEGPGo5RFkyFvyvyozWX2SZg4g1o1X40qSg9
0FMHTEB5HQebEkKBoRQMCJN/uyKXTLjNB7ibtVbZmfjsi9oNd3NJNVQQH+o9I/rP
wtFsjs+t7SKrsFB2cxZQdDlFzD6EBA+5ytebGEI1lJHcOUEa6P+LTphlwh/o1QuN
IKX2YKHA4ePrBzdgZ+xZuSLn/Qtjg/eZv6i73VXoHk8EdxfOk5xkJ+DnsNmyx0vq
W53+O05j5xsxzDJfWr1lqBlFF/OkIYCPcyK1iLs4GOwe/V0udDNwr2Uw90tefr3q
X1OZ9Dix+U0u6xXTZTETJ5dF3hV6GF7hP3Tmj9/UQdBwBzr+D8YWzQ==
-----END RSA PRIVATE KEY-----

Naturellement, vous ne devrez montrer cette clé à personne ! Inutile de le préciser, celle que nous avons montrée ici n'est désormais plus utilisée comme clé privée.

Le certificat racine (cacert.pem) ressemble à cela:

-----BEGIN CERTIFICATE-----
MIIDrTCCAxagAwIBAgIBADANBgkqhkiG9w0BAQQFADCBnDEbMBkGA1UEChMSVGhl
IFNhbXBsZSBDb21wYW55MRQwEgYDVQQLEwtDQSBEaXZpc2lvbjEcMBoGCSqGSIb3
DQEJARYNY2FAc2FtcGxlLmNvbTETMBEGA1UEBxMKTWV0cm9wb2xpczERMA8GA1UE
CBMITmV3IFlvcmsxCzAJBgNVBAYTAlVTMRQwEgYDVQQDEwtUU0MgUm9vdCBDQTAe
Fw0wMTEyMDgwNDI3MDVaFw0wMjEyMDgwNDI3MDVaMIGcMRswGQYDVQQKExJUaGUg
U2FtcGxlIENvbXBhbnkxFDASBgNVBAsTC0NBIERpdmlzaW9uMRwwGgYJKoZIhvcN
AQkBFg1jYUBzYW1wbGUuY29tMRMwEQYDVQQHEwpNZXRyb3BvbGlzMREwDwYDVQQI
EwhOZXcgWW9yazELMAkGA1UEBhMCVVMxFDASBgNVBAMTC1RTQyBSb290IENBMIGf
MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaiAwfKB6ZBtnTRTIo6ddomt0S9ec0
NcuvtJogt0s9dXpHowh98FCDjnLtCi8du6LDTZluhlOtTFARPlV/LVnpsbyMCXMs
G2qpdjJop+XIBdvoCz2HpGXjUmym8WLqt+coWwJqUSwiEba74JG93v7TU+Xcvc00
5MWnxmKZzD/R3QIDAQABo4H8MIH5MAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFG/v
yytrBtEquMX2dreysix/MlPMMIHJBgNVHSMEgcEwgb6AFG/vyytrBtEquMX2drey
six/MlPMoYGipIGfMIGcMRswGQYDVQQKExJUaGUgU2FtcGxlIENvbXBhbnkxFDAS
BgNVBAsTC0NBIERpdmlzaW9uMRwwGgYJKoZIhvcNAQkBFg1jYUBzYW1wbGUuY29t
MRMwEQYDVQQHEwpNZXRyb3BvbGlzMREwDwYDVQQIEwhOZXcgWW9yazELMAkGA1UE
BhMCVVMxFDASBgNVBAMTC1RTQyBSb290IENBggEAMA0GCSqGSIb3DQEBBAUAA4GB
ABclymJfsPOUazNQO8aIaxwVbXWS+8AFEkMMRx6O68ICAMubQBvs8Buz3ALXhqYe
FS5G13pW2ZnAlSdTkSTKkE5wGZ1RYSfyiEKXb+uOKhDN9LnajDzaMPkNDU2NDXDz
SqHk9ZiE1boQaMzjNLu+KabTLpmL9uXvFA/i+gdenFHv
-----END CERTIFICATE-----

Nous pouvons demander le contenu de ce certificat avec openssl pour apprendre à qui il appartient, pour quels usages il est valide, etc... :


# openssl x509 -in cacert.pem -noout -text
# openssl x509 -in cacert.pem -noout -dates
# openssl x509 -in cacert.pem -noout -purpose

7 : Créer une Requête de Signature de Certificat (CSR)

Maintenant que nous disposons d'un certificat racine, nous pouvons créer autant de certificats que nous le voulons et les utiliser dans nos applications SSL telles qu'https, spop ou simap. La procédure à suivre implique de créer une clé privée et une demande de signature de certificat (Certificate Signing Request ou CSR), puis de faire signer cette demande pour générer un certificat.

Notre fichier de configuration nécessite quelques définitions supplémentaires pour créer des certificats non-CA. Ajoutez les lignes suivantes à la fin du fichier openssl.cnf:


[ v3_req ]
basicConstraints	= CA:FALSE
subjectKeyIdentifier	= hash

Pour éviter de devoir le répéter à chaque fois sur la ligne de commande, insérez la ligne suivante dans la section [ req ] après la ligne distinguished_name comme montré ci-dessous :

distinguished_name	= req_distinguished_name
req_extensions		= v3_req

Nous sommes maintenant prêts à créer notre première requête de signature de certificat (CSR). Dans cet exemple, nous allons créer un certificat pour un serveur POP sécurisé à l'adresse mail.exemple.com. Tout se passe comme lorsque nous avons créé le certificat CA, sauf pour les trois questions suivantes auxquelles les réponses sont différentes.

Le Common Name doit être (ou l'adresse IP doit être résolue comme) le nom utilisé par vos clients pour contacter votre serveur. S'il ne correspond pas, vos clients verront à chaque fois qu'ils se connecteront un message leur demandant s'ils veulent utiliser ce serveur. En effet, le logiciel client dira : "Attention, vous avez demandé mail.exemple.com, mais le certificat de la machine qui a répondu correspond à smtp.exemple.com. Etes-vous sur de vouloir continuer?"


# openssl req -new -nodes -out req.pem -config ./openssl.cnf
...
Organizational Unit Name (department, division) []:Serveur de courrier
Email Address []:postmaster@exemple.com
Common Name (hostname, IP, or your name) []:mail.exemple.com
...

Ce processus produira deux fichiers de sortie:

Ces fichiers doivent être conservés. Quand le certificat que vous étes sur le point de créer expirera, la CSR pourra être utilisée à nouveau pour créer un nouveau certificat avec une autre date d'expiration. La clé privée est naturellement nécessaire pour le chiffrement SSL. Lorsque vous sauvegarderez ces fichiers, il sera préférable d'utiliser des noms explicites tels que serveurmail.key.pem et serveurmail.req.pem

La requête de signature de certificat (CSR) ressemble à ceci:

-----BEGIN CERTIFICATE REQUEST-----
MIICJDCCAY0CAQAwgagxGzAZBgNVBAoTElRoZSBTYW1wbGUgQ29tcGFueTEUMBIG
A1UECxMLTWFpbCBTZXJ2ZXIxJDAiBgkqhkiG9w0BCQEWFXBvc3RtYXN0ZXJAc2Ft
cGxlLmNvbTETMBEGA1UEBxMKTWV0cm9wb2xpczERMA8GA1UECBMITmV3IFlvcmsx
CzAJBgNVBAYTAlVTMRgwFgYDVQQDEw9tYWlsLnNhbXBsZS5jb20wgZ8wDQYJKoZI
hvcNAQEBBQADgY0AMIGJAoGBAPJhc++WxcBaoDbJpzFbDg42NcOz/ELVFMU4FlPa
yUzUO+xXkdFRMPKo54d4Pf1w575Jhlu9lE+kJ8QN2st6JFySbc9QjPwVwl9D2+I3
SSf2kVTu+2Ur5izCPbVAfU0rPZxxK8ELoOkA1uwwjFz6EFuVvnHwlguonWKDtmYW
u7KTAgMBAAGgOzA5BgkqhkiG9w0BCQ4xLDAqMAkGA1UdEwQCMAAwHQYDVR0OBBYE
FLWaQsUVIQzWr58HtDinH1JfeCheMA0GCSqGSIb3DQEBBAUAA4GBAAbe0jrGEQ3i
tyVfy5Lg4/f69rKvDGs+uhZJ9ZRx7Dl92Qq2osE7XrLB1bANmcoEv/ORLZOjWZEY
NjMvuz60O7R8GKBrvb/YhAwWhIIt2LJqPkpAEWS0kY0AkoQcfZ7h6oC35+eJ7okg
Uu3WuE57RgcNt7/ftr0sG1jUyRwMLvhv
-----END CERTIFICATE REQUEST-----

Nous pouvons inspecter le contenu de notre requête pour nous assurer qu'elle soit correcte :


# openssl req -in req.pem -text -verify -noout

8 : Signer un certificat

Nous devons maintenant ajouter la section du fichier de configuration qui nous permet d'être une Autorité de Certification (CA). Cette section indiquera le chemin d'accès à divers éléments comme la base de données, le certificat CA et la clé privée. Elle fournit aussi quelques valeurs par défaut. Insérez les lignes suivantes dans votre fichier openssl.cnf, juste avant la section [ req ] :

[ ca ]
default_ca		= CA_default

[ CA_default ]
serial			= $dir/serial
database		= $dir/index.txt
new_certs_dir		= $dir/newcerts
certificate		= $dir/cacert.pem
private_key		= $dir/private/cakey.pem
default_days		= 365
default_md		= md5
preserve		= no
email_in_dn		= no
nameopt			= default_ca
certopt			= default_ca
policy			= policy_match

[ policy_match ]
countryName		= match
stateOrProvinceName	= match
organizationName	= match
organizationalUnitName	= optional
commonName		= supplied
emailAddress		= optional

Pour signer la CSR que nous avons créée à l'étape précédente, exécutez la commande suivante et répondez aux questions. Notez que la phrase de passe PEM qui vous sera demandée est celle que vous avez définie plus haut :


# openssl ca -out cert.pem -config ./openssl.cnf -infiles req.pem
Using configuration from ./openssl.cnf
Enter PEM pass phrase:demo
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
organizationName      :PRINTABLE:'The Sample Company'
organizationalUnitName:PRINTABLE:'Mail Server'
emailAddress          :IA5STRING:'postmaster@sample.com'
localityName          :PRINTABLE:'Metropolis'
stateOrProvinceName   :PRINTABLE:'New York'
countryName           :PRINTABLE:'US'
commonName            :PRINTABLE:'mail.sample.com'
Certificate is to be certified until Dec  8 04:37:38 2002 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Celà met à jour la base de données de la CA et produit deux fichiers de sortie :

Encore une fois, vous pouvez contrôler ce certificat :


# openssl x509 -in cert.pem -noout -text -purpose | more

Ce certificat contient à la fois la version encodée et une version humainement lisible dans le même fichier. Vous pouvez supprimer la version humainement lisible de la façcon suivante:


# mv cert.pem tmp.pem
# openssl x509 -in tmp.pem -out cert.pem

9 : Installer le certificat et la clé

Ceci dépend de l'application utilisée. Certaines veulent la clé et le certificat dans le même fichier, d'autres les veulent séparément. On peut combiner facilement la clé et le certificat ainsi :


# cat key.pem cert.pem > key-cert.pem

Après cela, vous disposez au choix des trois éléments suivants :

Copiez les fichiers nécessaires aux emplacements indiqués par les instructions spécifiques à votre application et votre système. Redémarrez les applications, et vous utilisez maintenant votre nouveau certificat.

9.1 : Apache

Apache dispose de directives de configuration séparées pour la clé et le certificat, nous les garderons donc dans des fichiers distincts. Ces fichiers devraient être conservés en dehors de l'arborescence DocumentRoot. Une structuration correcte pourrait donc ressembler à celà :

FichierCommentaire
/home/httpd/htmlDocumentRoot Apache
/home/httpd/sslfichiers relatifs à SSL
/home/httpd/ssl/cert.pemCertificat du site
/home/httpd/ssl/key.pemClé privée du site

A l'intérieur de la directive <VirtualHost> pour ce site (qui devrait bien sur utiliser le port 443), incluez les directives indiquant l'emplacement de ces fichiers :


<VirtualHost 192.168.1.1:443>
   ServerName mail.exemple.com
   DocumentRoot /home/httpd/html
   
   ... autres directives pour ce site ...
   
   SSLEngine on
   SSLLog /var/log/ssl_engine_log
   SSLCertificateFile /home/httpd/ssl/cert.pem
   SSLCertificateKeyFile /home/httpd/ssl/key.pem
</VirtualHost>

9.2 : Stunnel

Stunnel est utilisé comme wrapper SSL autour de services non-sécurisés classiques tels que POP ou IMAP. Il prend en arguments (entre autres) le service à exécuter et l'emplacement du certificat et de la clé privée.

La clé et le certificat sont fournis dans le même fichier. Ils peuvent être placés n'importe où, mais /etc/ssl/certs/ est un bon emplacement. Indiquez cela sur la ligne de commande stunnel de la façon suivante :

stunnel -p /etc/ssl/certs/key-cert.pem <autres arguments pour stunnel...>
A compléter...

10 : Distribuer votre certificat CA

Voilà finalement l'étape qui va permettre aux clients de ne plus se plaindre de certificats non-garantis. Envoyez cacert.pem à tous ceux qui utiliseront vos serveurs sécurisés afin qu'ils puissent l'installer dans leur navigateur, client de messagerie, etc... en tant que certificat racine.

11 : Renouvellement des certificats

Votre chaîne de certification peut être brisée par l'expiration de certificats, et ce de deux manières:

Dans le second cas, vous avez du travail à faire. Un nouveau certificat CA racine doit être créé et distribué, puis vos certificats existants doivent être créés ou signés à nouveau.

Dans le premier cas, vous avez deux solutions. Vous pouvez soit générer de nouvelles CSR et les signer comme décrit plus haut, soit (si vous les avez gardées) signer à nouveau les CSR originales. Dans tous les cas, les anciens certificats doivent être révoqués, puis de nouveaux certificats doivent être signés et installés dans vos applications sécurisées comme décrit précédemment.

Vous ne pouvez pas produire deux certificats avec le même Common Name, voilà pourquoi les certificats expirés doivent être révoqués. Tous les certificats sont dans le répertoire newcerts. Vous pouvez déterminer le nom de fichier d'un certificat correspondant à un Common Name donné. Pour celà, parcourez le fichier index.txt et en y recherchant ce Common Name. Le nom du fichier correspondant est formé par le numéro de série de cette entrée suivi de l'extension .pem. par exemple 02.pem. Pour révoquer un certificat :


# openssl ca -revoke newcerts/02.pem -config ./openssl.cnf
Using configuration from ./openssl.cnf
Enter PEM pass phrase: demo
Revoking Certificate 02.
Data Base Updated

Le certificat étant à présent révoqué, vous pouvez signer à nouveau la CSR originale, ou en créer une autre et la signer comme décrit plus haut.

12 : Obtenir un certificat signé par une CA commerciale

Le processus est globalement le même que celui que nous avons détaillé ici, mais la CA commerciale en assure la majeure partie. Vous devez créer une Requête de Signature de Certificat (CSR) et la soumettre à cette CA pour signature. Elle vous renverra un certificat signé prêt à installer.

Ce certificat sera automatiquement accepté par les navigateurs de vos clients car ils intègrent en standard les certificats de CA commerciales. Il n'y donc rien de plus à distribuer aux clients.

La configuration décrite ici peut s'avérer inadaptée à ce cas de figure, étant donné qu'une CSR peut contenir bien plus de choses. Différentes autorités de certification exigent que la CSR intègre différentes caractéristiques dont aucune n'a été évoquée ici. Ces ressources complémentaires sortent du cadre de ce document.

13 : Publier le certificat de votre CA

Vous pouvez proposer votre certificat en téléchargement sur votre site web. Si vous le faites, vous devriez également fournir une Liste de Révocation de Certificats (Certificate Revocation List ou CRL), et un moyen d'afficher un certificat à partir de son numéro de série. Cela sort du cadre de ce document.

Apache fournira votre certificat dans une forme reconnue par les navigateurs si vous spécifiez son type MIME. Vous pouvez par exemple utiliser l'extension .crt pour les certificats en téléchargement et ajouter la ligne suivante dans la section générale de votre configuration Apache :

AddType application/x-x509-ca-cert .crt

Vous pouvez maintenant rendre votre certificat disponible au téléchargement sur votre site avec un lien tel que <a href="www.exemple.com/notrecert.crt">Notre certificat CA</a>. Lorsqu'un visiteur suivra ce lien, son navigateur lui proposera d'installer ce certificat.

La CRL peut être créée ainsi:

# openssl ca -gencrl -crldays 31 -config ./openssl.cnf -out rootca.crl
A compléter...

14 : Résumé

Vous disposez désormais des informations suffisantes pour créer et signer des certificats pour votre propre compte. Bien que ce document soit relativement long, la procédure peut être résumée facilement.

14.1 : Configuration générale

Configuration et création d'un certificat de CA racine.

Commandes


# mkdir CA
# cd CA
# mkdir newcerts private
# echo '01' > serial
# touch index.txt
ATTENTION : Vous devez installer et éditer le fichier de configuration fourni plus bas.
# openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem \
-out cacert.pem -days 365 -config ./openssl.cnf

Résultat

FichierDescription
cacert.pemCertificat de la CA
private/cakey.pemClé privé de la CA

Distribuez cacert.pem à vos clients

14.2 : Par Certificat

Créer des CSR et les signer, en fournissant les valeurs appropriées comme Common Name et Organizational Unit.

Commandes


# openssl req -new -nodes -out req.pem -config ./openssl.cnf
# openssl ca -out cert.pem -config ./openssl.cnf -infiles req.pem
# cat key.pem cert.pem > key-cert.pem

Résultat

FichierDescription
key.pemClé privée
req.pemCSR
cert.pemCertificat
key-cert.pemClé privé et certificat combinés

Installez key.pem et cert.pem, ou uniquement key-cert.pem en fonction de votre application serveur.

14.3 : Par Certificat - Renouvellement

Révoquer les certificats expirés, et signer à nouveau les CSR originales.

Commandes


# openssl ca -revoke newcerts/<serial>.pem -config ./openssl.cnf
# openssl ca -out cert.pem -config ./openssl.cnf -infiles req.pem

Installer les certificats renouvelés de la même manière que les certificats originaux.

15 : Fichier de configuration

Télécharger le fichier openssl.cnf
#
# OpenSSL configuration file.
#

# Establish working directory.

dir			= .

[ ca ]
default_ca		= CA_default

[ CA_default ]
serial			= $dir/serial
database		= $dir/index.txt
new_certs_dir		= $dir/newcerts
certificate		= $dir/cacert.pem
private_key		= $dir/private/cakey.pem
default_days		= 365
default_md		= md5
preserve		= no
email_in_dn		= no
nameopt			= default_ca
certopt			= default_ca
policy			= policy_match

[ policy_match ]
countryName		= match
stateOrProvinceName	= match
organizationName	= match
organizationalUnitName	= optional
commonName		= supplied
emailAddress		= optional

[ req ]
default_bits		= 1024			# Size of keys
default_keyfile		= key.pem		# name of generated keys
default_md		= md5			# message digest algorithm
string_mask		= nombstr		# permitted characters
distinguished_name	= req_distinguished_name
req_extensions		= v3_req

[ req_distinguished_name ]
# Variable name		  Prompt string
#----------------------	  ----------------------------------
0.organizationName	= Organization Name (company)
organizationalUnitName	= Organizational Unit Name (department, division)
emailAddress		= Email Address
emailAddress_max	= 40
localityName		= Locality Name (city, district)
stateOrProvinceName	= State or Province Name (full name)
countryName		= Country Name (2 letter code)
countryName_min		= 2
countryName_max		= 2
commonName		= Common Name (hostname, IP, or your name)
commonName_max		= 64

# Default values for the above, for consistency and less typing.
# Variable name			  Value
#------------------------------	  ------------------------------
0.organizationName_default	= The Sample Company
localityName_default		= Metropolis
stateOrProvinceName_default	= New York
countryName_default		= US

[ v3_ca ]
basicConstraints	= CA:TRUE
subjectKeyIdentifier	= hash
authorityKeyIdentifier	= keyid:always,issuer:always

[ v3_req ]
basicConstraints	= CA:FALSE
subjectKeyIdentifier	= hash

16 : Références

Des informations complémentaires sont disponibles sur les sites suivants :


Recherche et rédaction par Marcus Redivo. Researched and written by Marcus Redivo.
Traduction française par RSL (29/05/2005) ORIGINAL DOCUMENT
L'utilisation de ce document pour n'importe quelle application est autorisée par la présente, à condition que l'information sur son auteur et l'avertissement suivant soient conservés. L'auteur décline toute responsabilité quant aux conséquences résultant de l'utilisation de ces informations. Permission to use this document for any purpose is hereby granted, providing that the copyright information and this disclaimer is retained. Author accepts no responsibility for any consequences arising from the use of this information.

Sommaire / Administration système et réseau / Création et utilisation des certificats SSL

Valid HTML 4.01 Created with VIM