# lighttpd support for SSLv2 and SSLv3 # # Documentation: https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_SSL # https://www.ssllabs.com/projects/best-practices/index.html # https://cipherli.st/ # https://wiki.mozilla.org/Security/Server_Side_TLS # https://mozilla.github.io/server-side-tls/ssl-config-generator/ $SERVER["socket"] == ":443" { protocol = "https://" ssl.engine = "enable" ssl.disable-client-renegotiation = "enable" # ssl.pemfile: path to the PEM file for SSL support # (Should contain both the private key and the certificate) ## If you have a .crt and a .key file, cat them together into a single PEM file: ## $ cat lighttpd.key lighttpd.crt > lighttpd.pem ssl.pemfile = "/etc/lighttpd/ssl/server.pem" # ssl.ca-file: path to the CA file for support of chained certificates # ssl.ca-file = "/etc/lighttpd/ssl/chain.pem" # for DH/DHE ciphers, dhparam should be >= 2048-bit # Generate with: # openssl dhparam -out dh2048.pem -outform PEM -2 2048 # ssl.dh-file = "/etc/lighttpd/ssl/dhparam.pem" # ECDH/ECDHE ciphers curve strength (see `openssl ecparam -list_curves`) # ssl.ec-curve = "secp384r1" # Compression is by default off at compile-time, but use if needed # ssl.use-compression = "disable" # Environment flag for HTTPS enabled # setenv.add-environment = ( # "HTTPS" => "on" # ) # intermediate configuration, tweak to your needs ssl.use-sslv2 = "disable" ssl.use-sslv3 = "disable" ssl.honor-cipher-order = "enable" # If you know you have RSA keys (standard), you can use: #ssl.cipher-list = "aRSA+HIGH !3DES +kEDH +kRSA !kSRP !kPSK" # The more generic version (without the restriction to RSA keys) is #ssl.cipher-list = "HIGH !aNULL !3DES +kEDH +kRSA !kSRP !kPSK" # List from https://mozilla.github.io/server-side-tls/ssl-config-generator/ ssl.cipher-list = "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS" # HSTS(15768000 seconds = 6 months) # setenv.add-response-header = ( # "Strict-Transport-Security" => "max-age=15768000;" # ) $HTTP["useragent"] =~ "MSIE" { server.max-keep-alive-requests = 0 } }