Outils pour utilisateurs

Outils du site


services:ssl

Sécurisation SSL

SSL (secure socket layer), et son successeur TLS (transport layer security) sont des normes de chiffrement, qui ont pour but de garantir que seuls les deux correspondants d'une connexion pourront lire les données véhiculées.

SSL ou TLS ?

SSL et TLS utilisent le même système de chiffrement et de vérification, et ne diffèrent que dans la façon d'établir le canal sécurisé :
  • avec SSL, on ouvre une connexion SSL, dans laquelle se déroule ensuite le dialogue protocolaire applicatif (HTTP, SMTP…) ;
  • avec TLS, on ouvre d'abord une connexion classique, puis on utilise une instruction particulière du protocole applicatif pour passer en mode sécurisé (HTTP Upgrade, SMTP STARTTLS…).

Si, pour mettre en place un service, vous avez le choix entre SSL et TLS, préférez donc TLS, mieux intégré avec le protocole applicatif.

Principe

Chiffrement asymétrique

Dans l'utilisation usuelle de SSL, le serveur dispose d'une paire de clefs de chiffrement :

  • une clef privée, qu'il est le seul à connaître ;
  • une clef publique, qu'il peut envoyer aux clients.

Lors de l'établissement d'une connexion SSL :

  1. le serveur envoie en clair au client sa clef publique ;
  2. le client génère une clef de chiffrement symétrique, et l'envoie au serveur, chiffrée avec sa clef publique ;
  3. le serveur déchiffre cette clef publique avec sa clef privée ;
  4. la suite de la connexion est alors chiffrée avec la clef symétrique, dont seuls le client et le serveur disposent.

Ainsi, le chiffrement asymétrique n'est utilisé que pour établir un canal de chiffrement symétrique, qui est moins coûteux en puissance de calcul pour une sécurité identique.

Certification

Avec un tel système, on est sûr que seul le propriétaire de la clef privée pourra déchiffrer la connexion chiffrée. Le problème est alors de savoir si cette clef est bien celle de votre interlocuteur prétendu.

SSL utilise un système de garantie centralisé. Ainsi, chaque serveur présente un certificat, qui contient :

  • sa clef publique de chiffrement ;
  • son identité (le plus souvent, son nom de domaine) ;
  • la signature numérique d'une autorité de certification, qui se porte garante de son identité.

Les certificats des grandes autorités de certification sont intégrés aux clients Internet, qui les utilisent pour vérifier les certificats.

Générer votre certificat

Pour pouvoir chiffrer vos communications, notamment celles qui impliquent la transmission d'un mot de passe, vous devez donc disposer d'un certificat et d'une clef privée SSL. Si vous mettez des services sécurisés à disposition du public, vous devez faire signer votre certificat par une autorité reconnue. Si vous êtes le seul à utiliser ces services, vous pouvez vous contenter d'un certificat auto-signé.

Dans tous les cas, vous pouvez placer vos requêtes, clefs et certificats dans les sous-répertoires req, private et certs du répertoire /etc/ssl/.

Certificat certifié

Vous devez d'abord générer une clef et une requête de certificat, qui contient les informations d'un certificat, sans signature d'une autorité :

# openssl req -new -out req/example.com.req -keyout private/example.com.key -nodes -utf8

Répondez aux questions sur votre identité et votre lieu, mais précisez bien votre nom de domaine comme nom commun (CN).

Noms alternatifs

Si votre serveur répond à plusieurs noms, par exemple example.com., pop.example.com. et imap.example.com., avec un certificat simple vous ne pourrez servir qu'un de ces noms. Pour sécuriser vos services sur tous ces noms, renseignez-vous sur les jokers (wildcards) et sur le champ de noms alternatifs du sujet (Subject AltName) des certificats SSL.

Vous devez ensuite transmettre cette clef à une autorité de certification comme StartSSL ou CAcert. Après avoir examiné et accepté votre requête, celle-ci vous donnera un certificat signé.

Autorités de certification

Le système de certification SSL est centralisé autour les autorités de certification. Celles-ci font en général payer une vérification légère de l'identité du demandeur, ce qui serait d'avantage le travail des États.

CAcert est une autorité de certification qui utilise une toile de confiance pour vérifier l'identité des gens, avec un système de points : les utilisateurs disposant de plus de 100 points peuvent vérifier l'identité d'autres utilisateurs pour leur accorder jusqu'à 20 points. À partir de 50 points, on peut disposer des certificats valables 2 ans. En revanche, cette autorité de certification n'est pas encore reconnue par les grands éditeurs de logiciels.

StartSSL est une autorité de certification traditionnelle qui délivre gratuitement des certificats valables 12 mois. Cette autorité de certification est reconnue par les grands éditeurs de logiciels.

Certificat auto-signé

Vous pouvez générer en une seule commande une clef privée et un certificat auto-signé :

# openssl req -new -x509 -out certs/example.com.pem -keyout private/example.com.key -nodes -utf8

Répondez aux questions sur votre identité et votre lieu, mais précisez bien votre nom de domaine comme nom commun (CN).

Des alertes de sécurité

Lorsque l'on propose un service sécurisé avec un certificat auto-signé (ou signé par une autorité inconnue), c'est imparable : le logiciel client affiche un avertissement de sécurité à propos d'un éventuel risque de falsification de l'identité du serveur.

Ce risque est réel : à moins de vérifier son empreinte, rien ne garantit que ce certificat est bien celui du serveur que l'on cherche à contacter, et quelqu'un peut très bien intercepter vos communications. En revanche, souvenez-vous qu'il est toujours préférable de transmettre vos données ainsi que de le faire en clair, même si les logiciels client n'affichent en général pas le moindre avertissement dans ce dernier cas.

Certificat couvrant plusieurs noms

Les certificats SSL couvrent généralement un seul nom de domaine, mais si vous fournissez des services pour plusieurs noms de domaines, vous pouvez utiliser l'extension SSL subjectAltName pour indiquer tous ces noms dans un unique certificat. Avec OpenSSL, cette extension ne peut pas être configurée sur la ligne de commande, et il faut donc modifier le fichier de configuration /etc/ssl/openssl.cnf:

/etc/ssl/openssl.cnf
[ req ]req_extensions = req_alt_name
 
[ req_alt_name ]
subjectAltName = DNS:www.example.com, DNS:webmail.example.com, DNS:toto.example.com

Il faut ensuite générer la requête de certificat ou le certificat auto-signé de la façon habituelle, en veillant bien à fournir un des noms de domaine du subjectAltName comme nom commun (CN), par exemple pour une requête de certificat :

# openssl req -new -out req/example.com.req -keyout private/example.com.key -nodes -utf8

Utiliser votre certificat

Tout d'abord, vérifiez les droits d'accès à votre clef privée : si le certificat est public, seuls les administrateurs et les logiciels proposant une connexion sécurisée doivent pouvoir lire la clef.

Vous devez maintenant configurer vos serveurs logiciels pour utiliser votre certificat. Par exemple, pour Postfix :

smtpd_tls_cert_file = /etc/ssl/certs/example.com.pem
smtpd_tls_key_file = /etc/ssl/private/example.com.key
smtpd_tls_CAfile = /etc/ssl/certs/class3.pem

Certains logiciels ont besoin de charger le certificat et la clef, et parfois même le certificat de l'autorité depuis un seul fichier : pour cela, concaténez simplement ces fichiers dans un seul :

# cat certs/example.com.pem private/example.com.key > private/example.com.bundle
services/ssl.txt · Dernière modification: Fri Nov 22 14:29:41 2013 par elessar