30 septembre 2015 ~ 0 Commentaire

Créer et utiliser des certificats SSL

Créer et Utiliser des Certificats SSL
Ce document décrit comment devenir vous-même une autorité de certification (root CA) et comment utiliser les outils OpenSSL . En tant que qu’autorité de certification émettrice de certificat, il vous est possible de signer et d’installer des certificats pour vos serveurs et applications tel que Apache et Stunnel.Table des matières
Le document ci-dessous est la traduction d’un article de Marcus Redivo. Vous pouvez trouver l’original ici
top


Portée

Certes ce document aborde un sujet très spécifique et très pointu, mais il répond à un besoin courant: éviter au navigateur et lecteur de mail entre autre de faire des alertes de sécurité liées aux certificats installés sur vos serveurs qui ne sont pas validés par une autorité émettrice de certificats reconnues (CA). Pour cela nous allons devenir nous même une autorité émettrice de certificat que nous allons signer nous-même.

La méthode a été mise au point en utilisant OpenSSL 0.9.6, 24 Sept 2000, environnement Linux

Back to top


Démarrage rapide

Si vous voulez créer de suite un certificat sans lire tout le document sautez directement à la fin en suivant ce lien Résumé.

Back to top


Sur le fond

Pourquoi devenir vous-même émetteur de CA? En fait on peut tirer parti du cryptage SSL sans pour autant devoir payer pour avoir un certificat signé par une autorité commerciale extérieure.

L’inconvénient c’est que les navigateurs vont sans arrêt vous avertir que votre certificat n’est pas digne de confiance. Il faudra importer votre certificat racine sur votre navigateur et à partir de là il n’y aura plus de différence entre vous et un certificat racine que vous avez achetez auprès d’une autorité de certification reconnue.

Les utilisateurs n’importeront votre certificat qu’à la seule condition qu’ils vous font confiance. C’est là que les autorités de certifications payantes ont un avantage. Elles signent un certificat après avoir fait des vérifications vous concernant. En acceptant leurs certificats (ils sont intégrés d’origine par l’éditeur de votre navigateur), nous faisons confiance aux certificats que ces autorités de certifications vont émettre pour garantir que celui qui affirme être quelqu’un est bien cette personne (physique ou morale). Nous faisons confiance à d’autres autorités de certification en important leurs certificats (par exemple les notre).

Remarque: Si vous avez un site commercial sécurisé il est plus judicieux d’acheter un vrai certificat signé par une autorité de certification reconnue.

Back to top

Prérequis

Vous aurez besoin d’installer une copie d’OpenSSL disponible ici http://www.openssl.org. Ce document ne va pas expliquer comment installer OpenSSL sur votre machine.

Back to top

Configuration de départ

Nous allons tout d’abord créer un répertoire de travail. L’endroit du répertoire n’a pas d’importance, dans cet exemple il est créé dans mon répertoire home.

# mkdir CA
# cd CA
# mkdir newcerts private

Le répertoire CA contiendra:

  • Notre certificat d’autorité de certification (CA)
  • La base de données des certificats que nous avons signés
  • Les clés, les demandes et les certificats que nous avons générés.

Ce sera par la suite notre répertoire de travail quand nous signerons ou nous créerons des certificats.

Le répertoire CA/ newcerts contiendra:

  • Une copie de chaque certificat que nous avons signé

Le répertoire CA/ private contiendra:

  • Notre clé privée de CA

Cette clé est très importante:

  • Ne perdez pas cette clé, sans elle il est impossible de signer ou renouveler quelques certificats que ce soit.
  • Ne donnez pas cette clé, ne la divulguez à personne. Si cette clé est compromise, d’autres que vous, pourront signer des certificats en se faisant passer pour vous.

L’étape suivant: créer la base de données contenant les certificats que nous allons signés.

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

Plutôt que d’utiliser le fichier de configuration qui est fourni avec OpenSSL, nous allons en créer un en version minimale dans notre répertoire de travail. Pour cela il faut ouvrir votre éditeur de texte (vi, pico, nano …)et créer un fichier openssl.cnf qui contiendra les lignes suivantes :

---Begin---
#
# OpenSSL configuration file.
#

# Establish working directory.

dir                    = .

----End----

Back to top

Créer un certificat racine (Root Certificate)

Avec OpenSSL la majorité de ce qui compose un certificat dépend directement du contenu du fichier de configuration (openssl.cnf) plutôt que de la commande saisi dans la console. C’est un point positif parce qu’il y a beaucoup d’éléments à définir pour créer un certificat.

Le fichier de configuration est divisé en sections qui sont parcourues et exécutées en fonction des arguments passés par le ligne de commande. Chaque section peut contenir des références à une ou plusieurs sections. Cette manière de faire permet de rendre le fichier de configuration plus modulaire. Une section commence toujours par une référence entre crochets par exemple [req].

Maintenant que nous savons comment définir une section, nous devons ajouter une section à notre fichier de configuration pour définir la manière de créer un certificat et le type de certificats que nous allons créer.

La première chose que nous avons à définir est Distinguished Name. Cet élément identifie le propriétaire du certificat quand il est affiché. Il n’est pas directement défini dans le fichier de configuration lui-même, mais fait partie de la section est qui réalisé quand nous utilisons dans la ligne de commande openssl req <argument> … , cette section est donc défini dans le fichier de configuration par [req].

---Begin---

[ 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

----End----

Pour éviter que notre certificat CA ne soit pas utilisé par quelqu’un d’autre nous allons le protéger par un mot de passe. Ainsi chaque fois que vous signerez un certificat le mot de passe sera demandé. Il est donc important de choisir un mot de passe fort.

Tout est prêt pour créer notre propre certificat racine auto signé. Pour cela nous voulons utiliser certains paramètres que nous venons juste d’intégrer au fichier de configuration. Nous spécifions les paramètres dans la ligne de commande.

Nos paramètres pour la commande openssl req sont:

  • Créer un nouveau certificat auto-signé: -new -x509
  • Créer un certificat CA: -extensions v3_ca
  • Le rendre valide plus que 30 jours: -days 3650
  • Ecrire le fichier à un endroit bien défini: -keyout, -out
  • Utiliser notre fichier de configuration: -config ./openssl.cnf

(A propos de l’expiration du certificat racine:
Quand un certificat racine expire ; tous les certificats qui ont été signé avec lui ne sont plus valides. Pour corriger cela, il faut créer et distribuer un nouveau certificat racine. Tous les certificats qui ont été signé avec le certificat racine échu doivent être révoqués et ressignés avec le nouveau certificat racine fraichement créé. Pour éviter de devoir recommencer cette procédure trop souvent, la période de validité du certificat racine doit être longue. Dans cet exemple nous avons choisi 10ans (3650 jours).

Exécutez la commande ci-dessous. Dans notre cas le nouveau mot de passe pour protéger le certificat devra être saisi et confirmé.

# 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

Le processus créé 2 fichiers en sortie:

  • Une clé privée dans private/cakey.pem
  • Un certificat racine d’autorité de certification (root CA) dans cacert.pem

cacert.pem est le fichier à distribuer aux clients qui veulent initier une connexion cryptée.
La clé privée (cakey.pem) ressemble à ça:

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

 

Bien sûr il ne faut jamais montrer cette clé à quiconque! La clé ci-dessus n’est plus une clé privée active.

Le certificat racine d’autorité de certification (root CA) (cacert.pem) ressemble à ça :

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

 

Il est possible de faire une requête avec la commande openssl pour savoir à qui appartient un certificat, quel est son champ de validité, etc…

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

Back to top

Créer une demande de signature de certificat (CSR)

Maintenant que nous avons un certificat racine, nous pouvons créer autant de certificat que nous le souhaitons pour nos application utilisant le SSL tel que https, spop, simap. Le processus implique la création d’une clé privée et d’une demande de signature de certificat. Ensuite il suffit d’utiliser la demande pour obtenir une signature.

Nous devons compléter notre fichier de configuration pour créer des certificats autres que ceux d’autorité de certification (CA). Ajoutez les lignes suivantes à la fin de votre fichier de configuration :

---Begin---
[ v3_req ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash----End----

Pour éviter de devoir sans arrêt le saisir dans la ligne de commande, ajoutez ce qui suit à la section [req] après distinguished_name :

—Begin—
distinguished_name = req_distinguished_name
req_extensions = v3_req
—-End—-

Maintenant nous sommes prêts à créer notre première demande de signature de certificat. Dans l’exemple suivant, nous créons un certificat pour un serveur POP sécurisé mail.sample.com. Tout se passe comme pour la création du certificat d’autorité de certification (CA certificat) cependant 3 des paramètres à saisir sont différentes.

 

  • Organizational Unit: à quoi correspond le certificat.
  • Email Address: le postmaster
  • Common Name: le nom du serveur

Le Common Name doit être le vrai nom du serveur (ou l’adresse IP réelle) qui est utilisée par vos client pour se connecter à l’hôte. Dans le cas contraire, chaque fois qu’un client veut se connecter, il aura à confirmer qu’il accepte d’utiliser votre serveur avec un message dans ce genre :

 

« Warning! You asked for mail.sample.com; the responding machine’s certificate is for smtp.sample.com. Are you sure you want to continue? »

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

 

Le processus génère 2 fichiers en sortie:

  • Une clé privée key.pem
  • Un certificat de demande (création) de signature (Certificate Signing Request) req.pem

Vous devez conserver ces fichiers. Quand les certificats que vous avez créés, expirent, les demandes peuvent être réutilisées pour créer un nouveau certificat avec une autre date. La clé privée est quant à elle nécessaire pour le cryptage SSL. Quand vous sauvegardez ces 2 fichiers, un nommage évident est très utile par exemple : mailserver.key.pem et mailserver.req.pem.

Une demande de signature de certificat ressemble à ce qui suit:

-----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 afficher le contenu notre demande pour vérifier que tout est correcte :

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

Back to top

Certificat de signature

Nous devons ajouter au fichier de configuration la section qui gère le fait d’être une autorité de certification (CA). Cette section va définir le chemin pour atteindre les différents éléments comme la base de données, le certificat de CA, la clé privé. Nous pouvons aussi spécifier certaines valeurs par défaut.

Insérez les lignes suivantes dans le fichier openssl.cnf juste avant la section [req] :

---Begin---
[ 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

----End----

Pour signer la demande faite dans le chapitre précèdent, exécuter la commande suivante et répondez aux questions posées. Notez bien que l’on vous demandera la mot de passe du fichier PEM que vous avez créé plutôt.

# 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

Ce processus a mis à jour la base de données de l’autorité de certification (CA) et a créé 2 fichiers en sortie:

  • Un certificat dans cert.pem
  • Une copie du certificat dans newcerts/<serial>.pem

A nouveau il est possible d’afficher certains éléments du certificat:

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

 

Le certificat est divisé en 2 partie: une lisible pour nous et une cryptée. Il est possible de supprimer la partie en Claire de la manière suivante:

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

 

Back to top

Installer le certificat et la clé

Tout dépend de l’application, certaine demande une clé et un certificat séparés, d’autres demande les 2 dans le même fichier. Il est facile de combiner les 2 comme suit :

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

Après cette étape, vous aurez 3 éléments utilisables selon vos besoins:

  • Une clé privée dans le fichier key.pem
  • Un certificat dans le fichier cert.pem
  • Un certificat combine avec sa clé dans le fichier key-cert.pem

Copiez les fichiers appropriés à l’endroit spécifié par l’application que vous utilisez. Il suffit de redémarrer votre application pour qu’elle prenne en compte votre clé/certificat.

Apache

Pour Apache, les directives pour configurer la clé et le certificat sont séparées, nous devons donc avoir des fichiers séparés pour les 2. Les fichiers ne doivent pas être dans le DocumentRoot ni dans un sous répertoire de DocumentRoot. Une architecture cohérente pourrait être comme suit :

Fichier Commentaires
/home/httpd/html Apache DocumentRoot
/home/httpd/ssl SSL-related files
/home/httpd/ssl/cert.pem Site certificate
/home/httpd/ssl/key.pem Site private key

Dans la partie des directives du <VirtualHost> qui est défini pour le site (par défaut port 443), vous devez inclure les directives qui pointent vers les fichiers suivants :

<VirtualHost 192.168.1.1:443>
   ServerName mail.sample.com
   DocumentRoot /home/httpd/html
   ... other directives for this site ...
   SSLEngine on
   SSLLog /var/log/ssl_engine_log
   SSLCertificateFile /home/httpd/ssl/cert.pem
   SSLCertificateKeyFile /home/httpd/ssl/key.pem
</VirtualHost>

Stunnel

stunnel est utilisé pour encapsuler dans un tunnel SSL des services qui ne sont normalement pas crypté par exemple IMAP and POP. Il prend comme argument entre autre le service à exécuter ainsi que la localisation de la clé privée et du certificat

La clé et le certificat sont inclus dans le même fichier qui peut être placé n’importe où, par exemple /etc/ssl/certs

Précisez l’endroit des fichiers comme suit:

stunnel -p /etc/ssl/certs/key-cert.pem <other stunnel args...>

une suite à venir…

Back to top

Distribuer le certificate de CA

C’est la dernière étape qui permet d’arrêter les avertissements de certificat non validé. Il suffit d’envoyer cacert.pem à toute personne qui va utiliser votre serveur sécurisé. Il sera alors possible d’installer le certificat pour le navigateur web, le lecteur de mail … en tant que certificat de confiance.

Back to top

Renouveller les certificats

Un ensemble de certificats peut être rendu inopérant pour 2 raisons :

  • Les certificats signés avec le certificat racine sont expirés.
  • Le certificat racine est expiré.

Dans le 2ème cas, il faut créer un nouveau certificat CA racine et le distribuer. Tous les certificats signés avec l’ancien CA racine doivent être remplacés ou signés à nouveau.

Dans le 1er cas, il y a 2 possibilités. Soit vous générez de nouvelles demandes de signatures de certificats et vous ressignez les certificats, ou si vous conservez les demandes de signatures de certificats (CSR) , vous réutilisez la demande de signature de certificat originale pour générer de nouveaux certificats. Dans tous les cas les anciens certificats doivent être révoqués, ensuite les nouveaux certificats signés sont installés dans les programmes sécurisés comme décrit précédemment.

Il est impossible d’utiliser 2 certificats avec le même Common Name, ceci explique pourquoi il faut absolument révoqués les anciens certificats. Les certificats sont dans le répertoire newcerts, il est possible de trouver son nom en recherchant dans le fichier index.txt grâce au (CN) Common Name. Le nom du fichier est le nom retrouvé dans le fichier index.txt auquel il faut ajouter l’extension 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

Maintenant que le certificat a été révoqué, il est possible de ressigner la demande originale ou d’en créer un nouveau en se référant aux explications ci-dessus.

Back to top

Obtenir un certificat payant signé par une entreprise certifiée.

Le processus est globalement le même que celui que nous venons de décrire. Le gros du processus est accompli par l’autorité de certification. Il vous faut généré la demande de signature de certificat comme vu précédemment et l’envoyer à l’autorité de certification, vous recevrez en retour un certificat signé que vous pourrez installé.

Comme votre navigateur est conçu pour automatiquement reconnaitre les certificats signés par une autorité de certification, vous n’avez rien à faire ni à installer.

La configuration décrite dans cet article peut dans certains cas ne pas être complète ou ne pas correspondre à un processus particulier, en effet les différentes autorités de certification peuvent demander d’autres éléments que nous n’avons pas abordés ici.

Back to top

Publication du certificat de CA ( autorité de certification )

Il est possible de mettre sur son site web votre certificat en vue d’être téléchargé.

Si vous utilisez cette méthode, il faudra aussi mettre à disposition une liste de révocation des certificats (Certificate Revocation List CRL) et donner le moyen d’accéder au numéro de série des certificats. Ceci dépasse le cadre actuel de cet article.

 

Apache va être capable de distribuer vos certificats à conditions que le type MIME de ces derniers soient paramétré correctement. Par exemple il est possible d’utiliser une extension du type ‘’crt’’. Pour cela il faut ajouter la ligne ci-dessous à la section générale du fichier de configuration d’apache.

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

Après avoir redémarré votre serveur, il est possible de télécharger un fichier sous la forme d’un lien du type

 

<a href= »www.sample.com/ourrootcert.crt »>Our Root Certificate</a>, du coup si vous cliquez sur un lien comme ci-dessus vous aurez la possibilité de télécharger le certificat.

Il est possible de créer la liste des certificats révoqués (CRL) de la manière suivante:

# openssl ca -gencrl -crldays 31 -config ./openssl.cnf -out rootca.crl

Back to top

Résumé

Vous avez maintenant assez d’éléments pour créer et signer vos propres certificats. Le document étant long, il est possible de résumé le tout comme ceci :

A faire une seule fois

Configurer et créer un certificat racine d’autorité de certification.

Commandes

# mkdir CA
# cd CA
# mkdir newcerts private
# echo '01' >serial
# touch index.txt
# (IMPORTANT: Install and edit the configuration file shown below.)
# openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem \
-out cacert.pem -days 365 -config ./openssl.cnf

En sortie

File Purpose
cacert.pem CA certificate
private/cakey.pem CA private key

Distribuer cacert.pem a vos clients.

Pour chaque certificat

Créer une demande de signature de certificat en fournissant toutes les informations nécessaires pour le Common Name et Organizational Unit.

Commandas

# 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

En sortie

File Purpose
key.pem Private key
req.pem Certificate signing request
cert.pem Certificate
key-cert.pem Combined private key and certificate

Installez key.pem et cert.pem, ou juste un fichier uniquement contenant les 2 du type key-cert.pem en fonction des besoins de votre serveur.

Par certificat – Renouvellement

Révoquer le certificat échu et réutilisez la demande originale.

Commandes

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

Installez le certificat renouvelé de la même façon que l’original.

Back to top

Configuration File

( Téléchargeable ici download.)

---Begin---
#
# 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
----End----

Back to top

Références

Vous pouvez trouver plus d’informations sur les sites suivants. (les liens s’ouvrent dans de nouvelles fenêtres):

Back to top

Researched and written by Marcus Redivo.
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.

 


Copyright © 1996, 2015 Marcus Redivo. All rights reserved.
Last modified on Sat Aug 29 16:09:53 2015

 

 

Laisser un commentaire

Vous devez être Identifiez-vous poster un commentaire.

Smart Tech |
ELCI Project |
Depann'heur info 34 |
Unblog.fr | Créer un blog | Annuaire | Signaler un abus | Marsoneproject
| Mh-informatique
| MAC OU PC ?