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 ?
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.
Dans l'utilisation usuelle de SSL, le serveur dispose d'une paire de clefs de chiffrement :
Lors de l'établissement d'une connexion SSL :
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.
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 :
Les certificats des grandes autorités de certification sont intégrés aux clients Internet, qui les utilisent pour vérifier les certificats.
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/
.
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
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
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.
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é
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.
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
:
[ 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
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