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.