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 modifier

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 modifier

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 modifier

Notes modifier

  1. 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).
  2. 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 modifier

Annexes modifier

Articles connexes modifier