Pour générer un certificat, il faut d'abord générer un couple clef privée / clef publique et une demande de certification contenant l'ensemble des éléments du certificat (société à qui appartient le certificat, nom du service associé (CN), localisation de la société).
Pour un certificat public, la clef publique et la demande de certification sont envoyés à une autorité de certification.
Pour un certificat privé, il faut créer une autorité de certification locale et créer le certificat à partir de l'autorité de certification.
Le certificat créé contient la clef publique, les informations fournies (société, service, localisation), les informations de l'autorité (nom de l'autorité, date de validité, méthode de création de la signature, ...) et une signature.
La signature correspond à un hash du certificat (sans la signature) crypté avec la clef privée de l'autorité de certification.
En ayant la clef publique de l'autorité de certification, il est alors possible de décrypter la signature du certificat d'un côté, de recréer le hash du certificat d'un autre côté et de comparer les deux.
2. Génération sous GNU/Linux
Le package OpenSSL sous Linux fournit les commandes nécessaire à la gestion des certificats.
Pour créer un certificat privé (certificat signé localement) ou obtenir un certificat public (certificat signé par une autorité de confiance publique), il faut d'abord créer un couple de clefs (clef publique / clef privée). Les options permettent de définir le format des clefs (RSA) et le nombre de bits des clefs (2048).
Puis, il faut créer une demande de certification appelée CSR à partir des clefs.
openssl req -new -key clefs.key > domaine.csr
Le processus de création du CSR implique de fournir certaines informations qui sont vérifiées par l'autorité afin :
- de créer le certificat avec les informations du détenteur,
- d'assurer que le détenteur du certificat est de confiance.
Les données doivent être correctes et dans le cas d'un certificat pour un site web, le Common Name doit correspondre au FQDN du site.
Pour un certificat public, le CSR est à fournir à l'autorité de certification. Pour un certificat privé, le package OpenSSL fournit les commandes nécessaires à la création d'une autorité et de création d'un certificat à partir d'un CSR.
Le certificat est fournit par l'autorité ou généré par l'autorité locale.
Dans le cas ou le certificat est au format PKCS7, il est possible de le transformer au format RSA pour l'inclure par exemple dans Apache.
openssl pkcs7 -in mon_certificat.p7b -inform DER -out mon_certificat.crt -print_certs
Description du protocole SSL
1. Description
La protocole SSL v3 ou TLS utilise 2 éléments dans sa communication :
- la clef privée,
- le certificat.
Le certificat contient les informations sur le certificat (autorité de certification / propriétaire / algo / validité), la clef publique liée au certificat et la signature du certificat (hash de la clef et des informations signé par la clef privée de l'autorité).
2. Algorithmes de cryptage
Le "cipher suite" est la combinaison des paramètres cryptographiques qui définissent les algorithmes et les clefs pour l'authentification, l'encryption et la protection par intégrité.
A l'établissement de la connexion, un ensemble de cipher suite est proposé par le serveur, le client choisit son cipher suite préféré.
Algorithme d'authentification / échange de clefs (Key)
L'algorithme d'authentification décrit le mécanisme d'échange de certificat / clefs pour l'authentification des tiers.
De façon à ce que chaque tiers s'assure / ou pas de l'identité de son interlocuteur et qu'une clef commune de cryptage symétrique soit partagée par les tiers, différents mécanismes existent.
Ces mécanismes décrivent l'échange de certificats et l'échange de clefs.
Exemple d'algorithmes :
- DHE_DSS (Diffie-Hellman),
- RSA.
Encryption (cipher)
L'algorithme d'encryption décrit le mécanisme de chiffrement symétrique des flux avec la clef secrète partagée.
Exemple d'algorithmes :
- RC4_128,
- DES_CBC.
Protection par intégrité (hash - digest)
L'algorithme de protection par intégrité décrit le mécanisme de signature des flux.
Les données échangées sont associées à un hash de ces mêmes données, le tout étant crypté dans le flux.
Chaque tiers peut ainsi s'assurer de l'intégrité des données à l'aide de la signature.
Transport Layer Security (TLS), anciennement nommé Secure Socket Layer (SSL), est un protocole de sécurisation des échanges sur Internet.
Authentification serveur
Description : contexte
Le client possède l'autorité de certification qui a signé le certificat serveur.
Description : initialisation de la communication TLS
Le handshake TLS est décrit comme suit.
Hello message
- échange en clair de message pour le choix des algorithmes et l'envoi d'une clef aléatoire de part et d'autres (algorithme d'authentification / échange de clef, algorithme de chiffrement symétrique, algorithme de création du "digest"),
Certificat serveur et authentification
- le serveur envoie son certificat au client,
- le client valide l'identité du serveur (validation du certificat : CN du certificat & signature du certificat),
Clef symétrique RSA : master secret
- le client génère une clef RSA "premaster secret" et l'encrypte avec la clef publique du serveur (suivant l'algorithme d'authentification / échange de clef défini dans le Hello message) et l'envoi au serveur,
- le serveur décrypte la clef RSA "premaster secret" avec sa clef privée,
- le client et le serveur génèrent la clef RSA "master secret" avec la clef RSA "premaster secret" et les clefs aléatoires échangées dans le Hello message,
Fin du Handshake
- le client génère un message de fin de handshake, crypté avec la clef RSA en suivant l'algorithme de chiffrement défini au début de l'échange (algorithme de chiffrement symétrique),
- le serveur vérifie le message de fin de handshake avec la clef RSA "master secret",
- le serveur génère un message de fin de handshake, crypté avec la clef RSA,
- le client vérifie le message de fin de handshake avec la clef RSA avec la clef RSA "master secret".
Description : communication TLS
Le client et le serveur peuvent alors crypter les données échangées avec la clef RSA "master secret" et l'algorithme de chiffrement symétrique identifié.
Authentification serveur et client
Description : contexte
Le client possède l'autorité de certification qui a signé le certificat serveur et le serveur possède l'autorité de certification qui a signé le certificat client.
Description : initialisation de la communication TLS
Le handshake TLS est décrit comme suit.
Hello message
- échange en clair de message pour le choix des algorithmes et l'envoi d'une clef aléatoire de part et d'autres (algorithme d'échange de clef, algorithme d'authentification, algorithme de chiffrement symétrique, algorithme de création du "digest"),
Certificat serveur et authentification
- le serveur envoie son certificat au client,
- le client valide l'identité du serveur (validation du certificat : CN du certificat & signature du certificat),
Certificat client et authentification
- le serveur envoie une demande de certificat au client,
- le client envoie son certificat au serveur,
- le serveur valide l'identité / la validité du client (validation du certificat : CN du certificat & signature du certificat),
Clef symétrique RSA : master secret
- le client génère une clef RSA "premaster secret" et l'encrypte avec la clef publique du serveur (suivant l'algorithme d'authentification défini dans le Hello message) et l'envoi au serveur,
- le serveur décrypte la clef RSA "premaster secret" avec sa clef privée,
- le client et le serveur génèrent la clef RSA "master secret" avec la clef RSA "premaster secret" et les clefs aléatoires échangées dans le Hello message,
Fin du Handshake
- le client génère un message de fin de handshake, crypté avec la clef RSA en suivant l'algorithme de chiffrement défini au début de l'échange (algorithme de chiffrement symétrique),
- le serveur vérifie le message de fin de handshake avec la clef RSA "master secret",
- le serveur génère un message de fin de handshake, crypté avec la clef RSA,
- le client vérifie le message de fin de handshake avec la clef RSA avec la clef RSA "master secret".
Description : communication TLS
Le client et le serveur peuvent alors crypter les données échangées avec la clef RSA "master secret" et l'algorithme de chiffrement symétrique identifié.