L'utilisation de certificats client SSL implique la délivrance aux utilisateurs de certificats appropriés, à hauteur d'un certificat par utilisateur généralement. Le processus se déroule comme suit :
Les deux premières étapes peuvent être menées à bien de différentes façons. Ce document vous explique comment effectuer ces opérations avec OpenSSL, un programme gratuit de manipulation de certificats en ligne de commande. Vous pouvez vous procurer OpenSSL à partir de la page des binaires OpenSSL.
Avec OpenSSL, la création d'une demande de signature de certificat (CSR) s'effectue en deux étapes : création d'une clé RSA privée, et création de la demande de certificat contenant le nom de l'utilisateur et diverses autres informations.
Commencez par créer une clé. Les saisies utilisateur apparaissent en gras:
Exemple 1
C:\tmp>openssl genrsa -des3 -out clientcert.key 1024 Loading 'screen' into random state - done
Generating RSA private key, 1024 bit long modulus
..............++++++
................++++++
e is 65537 (0x10001)
Enter pass phrase for clientcert.key: (the password is not echoed)
Verifying - Enter pass phrase for clientcert.key:
C:\tmp>
Cet exemple crée une clé de 1 024 bits et la stocke dans clientcert.key. Une clé de 1 024 bits offre un bon niveau de sécurité, mais pour accroître encore la sécurité (en abaissant néanmoins les performances), vous pouvez choisir une clé de 2 048 bits.
Créez ensuite la CSR :
Exemple 2
C:\tmp>openssl req -config \moveitdmz\util\openssl.conf -new -key clientcert.key -out clientcert.csr
Enter pass phrase for clientcert.key: (enter the password given above)
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.
-----
Country Name (2 letter code) [US]:US
State or Province Name (full name) [Some-State]:Wisconsin
Locality Name (eg, city) []:Madison
Organization Name (eg, company) [ACME Inc.]:Universal Exporters
Organizational Unit Name (eg, section) []:Accounting
Common Name (eg, fully qualified host name) []:Fred
Email Address []:fred@univ-exporters.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
C:\tmp>
Cet exemple crée une demande de certificat pour fred. Le mot de passe de challenge et le nom d'entreprise facultatifs ne sont généralement pas renseignés. Le fichier clientcert.csr est prêt à être envoyé à l'autorité de certification qui signera le certificat.
Une fois qu'une demande de certificat a été créée, elle doit être soumise à une autorité de certification pour signature. Cette fonction d'autorité de certification peut être assumée par :
Si vous voulez jouer vous-même le rôle d'autorité de certification afin de signer les CSR vous-même, vous devez vous procurer un certificat distinct. Ce type de certificat est délivré à un administrateur et NE concerne PAS les utilisateurs individuels. Vous pouvez vous procurer un tel certificat auprès de diverses sources, dont celles citées ci-dessus. Si vous travaillez pour une petite société, ou souhaitez juste faire un test, vous pouvez créer votre propre certificat auto-signé. Les certificats auto-signés offrent le même niveau de cryptage que les certificats achetés sur le marché. Néanmoins, pour que le serveur ait « confiance » en eux, un plus de temps est nécessaire. Les certificats auto-signés sont gratuits et leur durée de vie est aussi longue que vous le souhaitez.
Pour créer un certificat auto-signé de manière à pouvoir signer vous-même les CSR :
Exemple 3
C:\tmp>openssl req -config \moveitdmz\util\openssl.conf -x509 -days 365 -newkey rsa:1024 -keyout MyCAcert.key -out MyCAcert.cer
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
.....++++++
....++++++
writing new private key to 'MyCAcert.key'
Enter PEM pass phrase: (enter a new password that will be known only to the administrator)
Verifying - Enter PEM pass phrase:
-----
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.
-----
Locality Name (eg, city) []:Madison
Organizational Unit Name (eg, section) []:IT Dept
Common Name (eg, fully qualified host name) []:UE IT Security
Email Address []:ueitsec@univ-exporters.com
C:\tmp>
Ce code crée un certificat de 1 024 bits d'une durée de vie de 365 jours. Dans cet exemple, l'administrateur qui crée le certificat appartient à la même organisation que le demandeur du certificat client ci-dessus, mais il dépend d'un autre département. La clé est écrite dans MyCAcert.key et le certificat public dans MyCAcert.cer. Veillez à protéger de façon appropriée votre fichier MyCAcert.key et son mot de passe.
Après vous être procuré une clé de signature (créée par vous-même ou obtenue d'une autre manière), vous pouvez signer des CSR :
Exemple 4
C:\tmp>openssl x509 -req -in clientcert.csr -days 1000 -CA MyCAcert.cer -CAkey MyCAcert.key -CAcreateserial -out clientcert.cer
Loading 'screen' into random state - done
Signature ok
subject=/C=US/ST=Wisconsin/L=Madison/O=Universal Exporters/OU=Accounting/CN=Fred/emailAddress=fred@univ-exporters.com
Getting CA Private Key
Enter pass phrase for MyCAcert.key: (enter the password of the CA cert)
C:\tmp>
Ce code lit la demande de signature de certificat de l'utilisateur et signe le certificat, créant ainsi un certificat client dans le fichier clientcert.cer. Dans cet exemple, le certificat sera valable pendant 1 000 jours.
À ce stade, clientcert.cer est la composante publique du certificat client, et clientcert.key est sa composante privée. Certains logiciels client, et en particulier Microsoft Windows, exigent que ces fichiers soient convertis dans un format différent pour pouvoir être utilisés par le client. Si vous avez accès au fichier clientcert.key de l'utilisateur (dans la mesure, par exemple, où vous avez effectué vous-même l'équivalent de l'exemple 1), vous pouvez convertir ces deux fichiers dans un fichier unique au format .pfx, tel que requis par Windows, de la manière suivante :
Exemple 5
C:\tmp>openssl pkcs12 -export -in clientcert.cer -inkey clientcert.key -out clientcert.pfx
Loading 'screen' into random state - done
Enter pass phrase for clientcert.key: (enter the password created via "openssl genrsa" at the top)
Enter Export Password: (enter a new password. It can be the same as the openssl genrsa password)
Verifying - Enter Export Password:
C:\tmp>
Le fichier clientcert.pfx contient désormais les composantes privée et publique de la clé. Si l'utilisateur a créé sa propre CSR et ne vous a pas communiqué le fichier .key, il devra exécuter cette commande openssl pkcs12.
Le certificat client doit être importé dans le magasin de certificats de l'ordinateur de l'utilisateur. Si le système d'exploitation utilisé est Microsoft Windows, le fichier clientcert.pfx doit être copié sur l'ordinateur, après quoi la procédure suivante doit être menée à bien :
Le certificat client est désormais prêt à être utilisé. Pour vérifier que le certificat a bien été installé, vous pouvez examiner la liste des certificats client :
Si vous avez créé un certificat CA auto-signé, vous devez l'installer sur le serveur. Cette installation permettra au serveur d'accorder sa confiance aux certificats client signés avec ce certificat CA. (Si votre certificat CA provient d'un fournisseur de certificats important, cette étape n'est pas nécessaire, le certificat du fournisseur étant sans doute intégré dans Windows.)
Pour exécuter l'Assistant Certificat de Windows afin d'importer votre certificat CA.