Demande de signature de certificat
Dans une infrastructure PKI (en anglais Public Key Infrastructure soit infrastructure à clés publiques), une demande de signature de certificat (en anglais CSR pour Certificate Signing Request) est un message envoyé à partir d'un demandeur à une autorité de certification afin de demander un certificat d'identité numérique. Le format le plus commun pour les CSR est la spécification PKCS#10.
Procédure
Avant de créer un CSR, le requérant crée une paire de clés (une publique et une privée) en gardant la clé privée secrète[note 1]. Le CSR contient des informations d'identification du demandeur (examiné comme un nom unique dans le cas d'un certificat X.509), et la clé publique choisie par le demandeur. La clé privée correspondante n'est pas incluse dans le CSR, mais est utilisée pour signer numériquement la demande. Le CSR peut être accompagné d'autres informations d'identification ou des preuves d'identité requises par l'autorité de certification, et l'autorité de certification peut contacter le demandeur pour plus d'informations.
Si la demande est acceptée, l'autorité de certification retourne un certificat d'identité signé numériquement avec la clé privée de l'autorité de certification.
Voici les informations typiquement présentes dans un CSR :
Note : les informations entre parenthèses dans la colonne informations constituent une fois assemblées le nom complet qui sera employé dans le certificat.
Information | Description |
---|---|
Common Name (CN=) | Le nom complet (FQDN) du domaine Internet à sécuriser par exemple « www.wikipedia.org »[note 2]. |
Nom de l'entreprise / Organisation (O=) | Nom d'une société ou d'une association légalement constituée. |
Nom du département / Unité Organisationnelle (OU=) | Par exemple RH, finance, informatique |
Localité (L=) | Par exemple Paris, Londres |
Province, Région ou État (ST=) | Par exemple Normandie, Ile-de-France |
Pays (C=) | Le code à deux lettres ISO pour le pays où est situé l'organisme. Par exemple FR, CA |
Une adresse e-mail | Une adresse e-mail pour contacter l'organisation. Habituellement l'adresse email de l'administrateur de certificats |
Exemple
Voici une demande de certificat en format PEM (le format PEM est le résultat du codage base64 du format PKCS#10 qui est en ASN.1).
-----BEGIN CERTIFICATE REQUEST----- MIIBMzCB3gIBADB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEW MBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEjMCEGA1UEChMaV2lraW1lZGlhIEZvdW5k YXRpb24sIEluYy4xGDAWBgNVBAMUDyoud2lraXBlZGlhLm9yZzBcMA0GCSqGSIb3 DQEBAQUAA0sAMEgCQQC+ogxM6T9HwhzBufBTxEFKYLhaiNRUw+8+KP8V4FTO9my7 5JklrwSpa4ympAMMpTyK9cY4HIaJOXZ21om85c0vAgMBAAGgADANBgkqhkiG9w0B AQUFAANBAAf4t0A3SQjEE4LLH1fpANv8tKV+Uz/i856ZH1KRMZZZ4Y/hmTu0iHgU 9XMnXQI0uwUgK/66Mv4gOM2NLtwx6kM= -----END CERTIFICATE REQUEST-----
La sous-commande req de OpenSSL permet de créer rapidement de tels fichiers mais également d'en afficher le contenu :
$ openssl req -text -noout -in request.pem Certificate Request: Data: Version: 0 (0x0) Subject: C=US, ST=California, L=San Francisco, O=Wikimedia Foundation, Inc., CN=*.wikipedia.org Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (512 bit) Modulus (512 bit): 00:be:a2:0c:4c:e9:3f:47:c2:1c:c1:b9:f0:53:c4: 41:4a:60:b8:5a:88:d4:54:c3:ef:3e:28:ff:15:e0: 54:ce:f6:6c:bb:e4:99:25:af:04:a9:6b:8c:a6:a4: 03:0c:a5:3c:8a:f5:c6:38:1c:86:89:39:76:76:d6: 89:bc:e5:cd:2f Exponent: 65537 (0x10001) Attributes: a0:00 Signature Algorithm: sha1WithRSAEncryption 07:f8:b7:40:37:49:08:c4:13:82:cb:1f:57:e9:00:db:fc:b4: a5:7e:53:3f:e2:f3:9e:99:1f:52:91:31:96:59:e1:8f:e1:99: 3b:b4:88:78:14:f5:73:27:5d:02:34:bb:05:20:2b:fe:ba:32: fe:20:38:cd:8d:2e:dc:31:ea:43
La sous commande asn1parse décode le format ASN.1 dont est composée cette demande de certificat (l'option -i permet l'indentation de la structure) :
$ openssl asn1parse -i -in request.pem
0:d=0 hl=4 l= 307 cons: SEQUENCE
4:d=1 hl=3 l= 222 cons: SEQUENCE
7:d=2 hl=2 l= 1 prim: INTEGER :00
10:d=2 hl=2 l= 121 cons: SEQUENCE
12:d=3 hl=2 l= 11 cons: SET
14:d=4 hl=2 l= 9 cons: SEQUENCE
16:d=5 hl=2 l= 3 prim: OBJECT :countryName
21:d=5 hl=2 l= 2 prim: PRINTABLESTRING :US
25:d=3 hl=2 l= 19 cons: SET
27:d=4 hl=2 l= 17 cons: SEQUENCE
29:d=5 hl=2 l= 3 prim: OBJECT :stateOrProvinceName
34:d=5 hl=2 l= 10 prim: PRINTABLESTRING :California
46:d=3 hl=2 l= 22 cons: SET
48:d=4 hl=2 l= 20 cons: SEQUENCE
50:d=5 hl=2 l= 3 prim: OBJECT :localityName
55:d=5 hl=2 l= 13 prim: PRINTABLESTRING :San Francisco
70:d=3 hl=2 l= 35 cons: SET
72:d=4 hl=2 l= 33 cons: SEQUENCE
74:d=5 hl=2 l= 3 prim: OBJECT :organizationName
79:d=5 hl=2 l= 26 prim: PRINTABLESTRING :Wikimedia Foundation, Inc.
107:d=3 hl=2 l= 24 cons: SET
109:d=4 hl=2 l= 22 cons: SEQUENCE
111:d=5 hl=2 l= 3 prim: OBJECT :commonName
116:d=5 hl=2 l= 15 prim: T61STRING :*.wikipedia.org
133:d=2 hl=2 l= 92 cons: SEQUENCE
135:d=3 hl=2 l= 13 cons: SEQUENCE
137:d=4 hl=2 l= 9 prim: OBJECT :rsaEncryption
148:d=4 hl=2 l= 0 prim: NULL
150:d=3 hl=2 l= 75 prim: BIT STRING
227:d=2 hl=2 l= 0 cons: cont [ 0 ]
229:d=1 hl=2 l= 13 cons: SEQUENCE
231:d=2 hl=2 l= 9 prim: OBJECT :sha1WithRSAEncryption
242:d=2 hl=2 l= 0 prim: NULL
244:d=1 hl=2 l= 65 prim: BIT STRING
Notes et références
Notes
- Il s'agit là du mode décentralisé, en mode centralisé, une autorité génère la clef privée d'un utilisateur puis lui transmettra de façon sécurisée (par exemple dans un fichier au format PKCS#12).
- Il est possible de sécuriser plusieurs domaines grâce à l'emploi du caractère joker * comme dans « *.wikipedia.org » qui englobe toutes les langues de Wikipédia.
Références
Annexes
Articles connexes
- Portail de la sécurité informatique
- Portail de la cryptologie