Lighttpd 配置 SSL
本文档指导您在 lighttpd 1.4.x HTTP 服务器上安装并配置 SSL 证书,关于 lighttpd 1.4.x 在各个平台上的安装不再涉及。
由于近年 OpenSSL 高危漏洞不断,因此强烈推荐您在开始配置之前首先升级 OpenSSL 到最新版本
配置 SSL 证书
完整的 SSL 证书分为四个部分:
- CA 根证书 (root CA)
- 中级证书 (Intermediate Certificate)
- 域名证书
- 证书密钥 (仅由您持有)
以 COMODO 证书为例,您将收到四份文件:
- 根证书 - AddTrustExternalCARoot.crt
- 中级证书 - COMODORSAAddTrustCA.crt
- 中级证书 - COMODORSADomainValidationSecureServerCA.crt
- 您的域名证书 - example_com.crt
您要依照 中间证书 -> 根证书 的顺序串联为证书链,才能被绝大多数浏览器信任。使用 cat 命令串联中间证书、根证书:
cat COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > ca-root.bundle.crt
然后将证书密钥 example_com.key 和域名证书 example_com.crt 合并
cat example_com.key example_com.crt > example_com.pem
得到 root.bundle.crt 和 example_com.pem 后,将两者上传至服务器并保存在安全的位置,例如 /etc/ssl/private 目录下 (没有此目录请创建)。
修改 lighttpd 站点配置
下面是 lighttpd.conf 文件中关于 SSL 的部分配置
$SERVER["socket"] == ":443" { ssl.engine = "enable" ssl.pemfile = "/etc/ssl/private/example_com.bundle.pem" ssl.ca-file = "/etc/ssl/private/ca-root.bundle.crt" server.name = "example.com" server.document-root = "/var/www" }
强制定向到 HTTPS
下面是 lighttpd.conf 文件中关于强制 HTTP 定向到 HTTPS 的部分配置
$HTTP["scheme"] == "http" { # capture vhost name with regex conditiona -> %0 in redirect pattern # must be the most inner block to the redirect rule $HTTP["host"] =~ ".*" { url.redirect = (".*" => "https://%0$0") } }
Lighttpd 安全配置
禁用 SSL Compression (抵御 CRIME 攻击)
ssl.use-compression = "disable"
禁用 SSLv2 及 SSLv3
ssl.use-sslv2 = "disable" ssl.use-sslv3 = "disable"
抵御 Poodle 和 SSL downgrade 攻击
您需要支持 TLS-FALLBACK-SCSV 以自动开启此功能。下列 OpenSSL 版本包含对 TLS-FALLBACK-SCSV 的支持,Lighttpd 会自动启用此特性。
- OpenSSL 1.0.1 在 1.0.1j 及之后的版本中支持
- OpenSSL 1.0.0 在 1.0.0o 及之后的版本中支持
- OpenSSL 0.9.8 在 0.9.8zc 及之后的版本中支持
加密及交换算法
一份推荐的配置:
ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES128+EECDH:AES128+EDH"
如果您需要兼容一些老式系统和浏览器 (例如 Windows XP 和 IE6),请使用下面的:
ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"
配置 Forward Secrecy 和 DHE 参数
生成强 DHE 参数:
cd /etc/ssl/certs openssl dhparam -out dhparam.pem 4096
建议您使用性能强劲的平台生成此文件,例如最新版的至强物理机。如果您只有一台小型 VPS,请使用 openssl dhparam -out dhparam.pem 2048 命令生成 2048bit 的参数文件。
添加到 SSL 配置文件:
ssl.dh-file = "/etc/ssl/certs/dhparam.pem" ssl.ec-curve = "secp384r1"
启用 HSTS
server.modules += ( "mod_setenv" ) $HTTP["scheme"] == "https" { setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload") }
重启 Lighttpd
sudo service lighttpd restart