Le 20 septembre 2013, Benjamin Sonntag, directeur technique d’Octopuce, était en conférence sur SSL/TLS et le chiffrement dans le web à la Cantine / Numa, dans le cadre de Il était une fois Internet, cycle de conférence expliquant comment marche l’Internet.
Pendant cette formation, nous avons abordé progressivement tout le monde de SSL/TLS : chiffrement, signature, certificats. Nous sommes ensuite passé sur l’histoire de SSL par Netscape, celle de TLS par l’IETF, et l’ensemble des normes qui égrènent cette série de protocoles, clé de voûte de la sécurité sur Internet.
Nous avons terminé par les principes techniques évolués de SSL/TLS : PFS, Le choix des algorithmes de chiffrement, SNI, les certificats Wildcard et EV, S/MIME, etc.
Bien entendu, nous avons montré des exemples de configurations pour les logiciels les plus courants (http, mail, jabber, ftp…) et répondu à vos questions sur ce sujet.
Merci à Skhaen pour l’organisation de ce cycle de conférence passionnantes !
Les slides peuvent être téléchargées ici : SSL-TLS_Sonntag.pdf.
Le document « Analysis of the HTTPS Certificate Ecosystem » peut être téléchargé ici : Analysis of the certificate ecosystem (pdf).
Exemples de configurations
Apache
ServerAdmin webmaster@octopuce.fr DocumentRoot /var/www SSLCertificateFile /etc/ssl/private/octopuce.fr.crt SSLCertificateChainFile /etc/ssl/private/octopuce.fr.chain SSLCertificateKeyFile /etc/ssl/private/octopuce.fr.key SSLEngine on SSLProtocol +TLSv1.2 +TLSv1.1 +TLSv1 SSLCompression off SSLHonorCipherOrder on SSLCipherSuite ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM Header set Strict-Transport-Security "max-age=2678400"
Nginx
server { listen 443; ssl on; ssl_certificate /etc/ssl/private/octopuce.fr.crt+chain; ssl_certificate_key /etc/ssl/private/octopuce.fr.key; ssl_session_timeout 5m; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM; ssl_dhparam /etc/ssl/private/dh2048.pem; add_header Strict-Transport-Security max-age=2678400; }
Et
openssl dhparam -out /etc/ssl/private/dh2048.pem -outform PEM -2 2048
lighttpd
$SERVER["socket"] == "0.0.0.0:443" { ssl.engine = "enable" ssl.pemfile = "/etc/ssl/private/octopuce.fr.key+crt" ssl.ca-file = "/etc/ssl/private/octopuce.fr.chain" ssl.cipher-list = "ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM" ssl.honor-cipher-order = "enable" setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=2678400") }
Postfix
# TLS parameters smtpd_tls_cert_file = /etc/ssl/private/octopuce.fr.crt+chain smtpd_tls_dcert_file = $smtpd_tls_cert_file smtpd_tls_key_file = /etc/ssl/private/octopuce.fr.key smtpd_tls_dkey_file = $smtpd_tls_key_file smtpd_tls_CAfile = /etc/ssl/certs/ca-certificates.crt smtpd_tls_mandatory_ciphers = high smtpd_tls_mandatory_exclude_ciphers = aNULL, MD5 smtpd_tls_dh1024_param_file = /etc/ssl/private/dh2048.pem smtpd_use_tls = yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtpd_tls_protocols = !SSLv2,!SSLv3 smtpd_tls_received_header = yes smtp_tls_cert_file = $smtpd_tls_cert_file smtp_tls_dcert_file = $smtpd_tls_dcert_file smtp_tls_key_file = $smtpd_tls_key_file smtp_tls_dkey_file = $smtpd_tls_dkey_file smtp_tls_CAfile = $smtpd_tls_CAfile smtp_tls_mandatory_ciphers = $smtpd_tls_mandatory_ciphers smtp_tls_mandatory_exclude_ciphers = $smtpd_tls_mandatory_exclude_ciphers smtp_use_tls = yes smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtp_tls_protocols = !SSLv2,!SSLv3 smtp_tls_secure_cert_match = nexthop, dot-nexthop
Proftpd
TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol TLSv1 TLSCipherSuite ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM TLSRSACertificateFile /etc/ssl/private/octopuce.fr.crt+chain TLSRSACertificateKeyFile /etc/ssl/private/octopuce.fr.key TLSRenegotiate required off TLSOptions NoCertRequest EnableDiags NoSessionReuseRequired TLSVerifyClient off TLSRequired on # facultatif
Prosody
ssl = { key = "/etc/ssl/private/octopuce.fr.key"; certificate = "/etc/ssl/private/octopuce.fr.crt+chain"; } c2s_require_encryption = true s2s_require_encryption = true
IMPORTANT : copier le bloc SSL = { } dans tout VirtualHost.