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.
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.
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)
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.
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.
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.
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 = .
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
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
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
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.
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à :
| Fichier | Commentaire |
|---|---|
| /home/httpd/html | DocumentRoot Apache |
| /home/httpd/ssl | fichiers relatifs à SSL |
| /home/httpd/ssl/cert.pem | Certificat du site |
| /home/httpd/ssl/key.pem | Clé 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>
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...>
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.
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.
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.
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
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.
Configuration et création d'un certificat de CA racine.
# mkdir CA # cd CA # mkdir newcerts private # echo '01' > serial # touch index.txt
# openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem \
-out cacert.pem -days 365 -config ./openssl.cnf
| Fichier | Description |
|---|---|
| cacert.pem | Certificat de la CA |
| private/cakey.pem | Clé privé de la CA |
Distribuez cacert.pem à vos clients
Créer des CSR et les signer, en fournissant les valeurs appropriées comme Common Name et Organizational Unit.
# 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
| Fichier | Description |
|---|---|
| key.pem | Clé privée |
| req.pem | CSR |
| cert.pem | Certificat |
| key-cert.pem | Clé privé et certificat combinés |
Installez key.pem et cert.pem, ou uniquement key-cert.pem en fonction de votre application serveur.
Révoquer les certificats expirés, et signer à nouveau les CSR originales.
# 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.
# # 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
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. |
|
|
|