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