Certificats
L'une des formes de cryptographie les plus répandues de nos jours est la cryptographie par clé publique. La cryptographie par clé publique utilise une clé publique et une clé privée. Ce système chiffre une information en utilisant une clé publique. L'information ne peut alors être déchiffrée qu'en utilisant la clé privée.
A common use for public-key cryptography is encrypting application traffic using a Secure Socket Layer (SSL) or Transport Layer Security (TLS) connection. One example: configuring Apache to provide HTTPS, the HTTP protocol over SSL. This allows a way to encrypt traffic using a protocol that does not itself provide encryption.
A Certificate is a method used to distribute a public key and other information about a server and the organization who is responsible for it. Certificates can be digitally signed by a Certification Authority, or CA. A CA is a trusted third party that has confirmed that the information contained in the certificate is accurate.
Types de certificats
Dans la plupart des cas, pour configurer un serveur sécurisé utilisant le chiffrement par clé publique, vous envoyez votre demande de certificat (avec votre clé publique) à l'autorité de certification, accompagné d'une preuve de votre identité et de votre paiement. La CA vérifie votre identité et la demande de certificat, puis vous renvoie un certificat pour votre serveur sécurisé. Une alternative consiste a créer votre propre certificat auto-signé.
Note that self-signed certificates should not be used in most production environments.
Pour continuer sur l'exemple de HTTPS, un certificat signé par une autorité de certification (CA) fournit deux fonctionnalités importantes absentes dans un certificat auto-signé :
-
Les navigateurs reconnaissent (généralement) automatiquement le certificat et permettent l'établissement d'une connexion sécurisée sans intervention de l'utilisateur.
-
Lorsqu'une autorité de certification (CA) émet un certificat, cela garantit l'identité de l'organisation qui fournit les pages Web au navigateur.
La plupart des navigateurs web et des ordinateurs, qui prennent en charge SSL ont une liste d'autorités de certification (CA) qu'ils acceptent automatiquement. Si un navigateur rencontre un certificat dont l'autorité de certification n'est pas dans la liste, le navigateur demande à l'utilisateur d'accepter ou de refuser la connexion. De plus, d'autres applications peuvent générer un message d'erreur lors de l'utilisation d'un certificat auto-signé.
Le processus d'acquisition d'un certificat signé par un CA est relativement simple et facile. En voici un survol rapide :
-
Créez une paire de clefs privé et publique.
-
Créez une demande de certificat basée sur la clé publique. La demande de certificat contient les informations concernant votre serveur et la société qui l'héberge.
-
Envoyez votre demande de certificat, avec les documents prouvant votre identité, à l'autorité de certification (CA). Nous ne pouvons pas vous dire quelle autorité de certification choisir. Votre décision peut être basée sur votre expériences passée, ou sur l'expérience de vos amis ou collègues, ou simplement sur des considérations financières.
Une fois l'autorité de certification choisie, vous devez suivre les instructions qu'ils vous ont indiquées pour obtenir un certificat de leur part.
-
Quand l'autorité de certification est sûre que vous êtes celui que vous prétendez être, elle vous envoie un certificat numérique.
-
Installez ce certificat sur votre serveur sécurisé, et configurez les applications appropriées pour utiliser le certificat.
Génération d'une demande de signature de certificat (Certificate Signing Request ou CSR)
Que vous ayez obtenu votre certificat d'une autorité de certification, ou qu'il s'agisse d'un certificat auto-signé, la première étape consiste à générer une clé.
If the certificate will be used by service daemons, such as Apache, Postfix, Dovecot, etc., a key without a passphrase is often appropriate. Not having a passphrase allows the services to start without manual intervention, usually the preferred way to start a daemon.
Cette section décrit la mise en place d'une clé avec et sans phrase de passe. La clé sans phrase de passe sera ensuite utilisée pour générer un certificat pouvant servir pour divers services ou démons.
L'utilisation de votre service sécurisé sans phrase de passe est utile car ces services peuvent démarrer sans que vous ayez à saisir cette phrase à chaque fois. Mais cela peut constituer une faille de sécurité pouvant mettre en danger tout le serveur.
Pour générer les clés pour une demande de signature de certificat (CSR), exécutez la commande suivante dans un terminal :
openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus ..........................++++++ .......++++++ e is 65537 (0x10001) Enter pass phrase for server.key:
Vous pouvez maintenant saisir votre mot de passe. Pour une meilleure sécurité, il doit contenir au minimum huit caractères. La longueur minimum lorsque vous spécifiez -des3 (algorithme de cryptographie) est de quatre caractères. Il devrait contenir des chiffres et/ou des signes de ponctuation et ne pas se trouver dans un dictionnaire de mots. Rappelez vous également que votre mot de passe est sensible à la casse (NdT : au sens typographique majuscules/minuscules).
Re-saisissez le mot de passe pour vérification. Lorsque vous l'avez retapé correctement, la clé du serveur est générée et stockée dans le fichier server.key.
Créez maintenant le clef non sécurisée (celle sans phrase de passe) et échangez le nom des clés :
openssl rsa -in server.key -out server.key.insecure mv server.key server.key.secure mv server.key.insecure server.key
La clé non sécurisée se nomme maintenant server.key et vous pouvez utiliser ce fichier pour générer le CSR sans saisir de mot de passe.
Pour créer la CSR, lancer la commande suivante dans un terminal :
openssl req -new -key server.key -out server.csr
Il vous sera alors demandé d'entrer la phrase de passe. Si elle est correcte, il vous sera alors demandé d'entrer le nom de l'entreprise, le nom du site, courriel, etc. Une fois toutes ces informations renseignées, votre CSR sera créé et conservé dans le fichier server.csr.
Vous pouvez maintenant soumettre ce fichier CSR à une autorité de certification (CA) pour traitement. La CA utilisera ce fichier CSR et émettra le certificat. D'un autre côté, vous pouvez créer un certificat auto-signé en utilisant ce CSR.
Création d'un certificat auto-signé (Self-Signed Certificate ou SSC)
Pour créer le certificat auto-signé, utilisez la commande suivante dans un terminal :
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
La commande ci-dessus vous demandera de saisir votre mot de passe. Une fois le mot de passe correct saisi, votre certificat sera créé et stocké dans le fichier server.crt.
Si votre serveur doit être utilisé dans un environnement de production, vous avez probablement besoin d'un certificat signé par une autorité de certification. Il n'est pas recommandé d'utiliser un certificat auto-signé.
Installation du certificat
Vous pouvez installer le fichier de clé server.key et le fichier de certificat server.crt, ou le fichier de certificat émis par votre autorité de certification, en exécutant les commandes suivantes dans un terminal :
sudo cp server.crt /etc/ssl/certs sudo cp server.key /etc/ssl/private
Vous devez maintenant simplement configurer les applications ayant la capacité d'utiliser le chiffrement par clé publique, pour qu'elles utilisent les fichiers de certificat et de clé. Par exemple, Apache peut servir les documents en HTTPS, Dovecot peut servir le courrier en IMAPS et POP3S, etc.
Autorité de certification
Si les services de votre réseau nécessitent plusieurs certificats, il peut être intéressant de mettre en place votre propre autorité de certification (AC) interne. En effet, cela permet aux différents services utilisant des certificats de faire confiance aisément aux autres services utilisant des certificats émis par la même AC.
-
Créez d'abord les répertoires qui hébergeront le certificat de l'AC et ses divers fichiers :
sudo mkdir /etc/ssl/CA sudo mkdir /etc/ssl/newcerts
-
L'AC a besoin de quelques fichiers supplémentaires pour être opérationnelle. Un pour garder trace du dernier numéro de série utilisé par l'AC (chaque certificat doit avoir un numéro de série distinct) et un autre pour garder trace des certificats générés :
sudo sh -c "echo '01' > /etc/ssl/CA/serial" sudo touch /etc/ssl/CA/index.txt
-
Le troisième fichier est celui des paramètres de l'AC. Bien qu'il ne soit pas strictement nécessaire, il est utile lors de la génération de plusieurs certificats. Modifiez /etc/ssl/openssl.cnf et changez la déclaration [ CA_default ] :
dir = /etc/ssl # Where everything is kept database = $dir/CA/index.txt # database index file. certificate = $dir/certs/cacert.pem # The CA certificate serial = $dir/CA/serial # The current serial number private_key = $dir/private/cakey.pem# The private key
-
Ensuite, créez le certificat racine auto-signé :
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
Il vous sera demandé de donner les renseignements concernant le certificat.
-
Installez maintenant le certificat racine et la clef :
sudo mv cakey.pem /etc/ssl/private/ sudo mv cacert.pem /etc/ssl/certs/
-
Vous êtes maintenant prêts à signer des certificats. Le premier élément nécessaire est un Certificate Signing Request (CSR) (plus de détails sont disponibles sur Génération d'une demande de signature de certificat (Certificate Signing Request ou CSR)). Une fois que vous avez un CSR, entrez ce qui suit pour générer un certificat signé par le CA:
sudo openssl ca -in server.csr -config /etc/ssl/openssl.cnf
Après avoir saisi un mot de passe pour la clé de l'AC, il vous sera demandé de signer le certificat. Une somme importante de données défileront ensuite à l'écran durant la création du certificat.
-
Il devrait maintenant y avoir un nouveau fichier, /etc/ssl/newcerts/01.pem, contenant la même sortie. Copiez et collez toutes les lignes à partir de : -----BEGIN CERTIFICATE----- jusqu'à la ligne : -----END CERTIFICATE----- dans un fichier nommé selon le nom d'hôte du serveur ou le certificat sera installé. Par exemple courriel.exemple.com.crt est un nom suffisamment précis.
Les certificats suivants seront nommés 02.pem, 03.pem etc.
Remplacez mail.exemple.com.crt par le nom correspondant à votre nom d'hôte.
-
Pour finir, copier le nouveau certificat vers son hôte et paramétrez les programmes devant l'utiliser. L'endroit par défaut pour installer les certificats est /etc/ssl/certs. Cela permet à de multiples services d'utiliser le même certificat sans compliquer de trop la gestion des droits d'accès aux fichiers.
Pour les programmes pouvant être paramétrés pour utiliser un certificat issu d'une AC, vous devriez copier aussi le fichier /etc/ssl/certs/cacert.pem vers le répertoire /etc/ssl/certs/ de chaque serveur.
Références
-
For more detailed instructions on using cryptography see the SSL Certificates HOWTO by tldp.org:
-
The Wikipedia HTTPS page has more information regarding HTTPS.
-
Pour plus d'informations sur OpenSSL consultez le site Web de OpenSSL.
-
Also, O'Reilly's Network Security with OpenSSL is a good in-depth reference.