证书来源
阿里云的免费证书,由Symantec提供,下载证书时没有Lighttpd这个服务器类型,所以选的类型是其他。
腾讯云的免费证书,由TrustAsia提供,也没有Lighttpd这个类型,但可使用Apache的证书。
合并证书
下载解压后的三个关键的文件:公钥和私钥及CA证书
阿里云的三个文件名类似这样:私钥:2143553x.key,公钥:2143553x.pem,CA证书:chain.pem。
腾讯云的三个文件名类似这样:私钥:3_xxx.cn.key,公钥:2_xxx.cn.crt,CA证书:1_root_bundle.crt。
合并私钥和公钥供lighttpd使用,
cat 2143553x.key 2143553x.pem > server.pem
。
配置HTTPS
1 | $SERVER["socket"] == ":443" { |
- 由于Lighttpd 1.x 版本不支持HTTP/2所以无法配置。
- 配置符合PFS规范的加密套件(关闭RC4加密和DHE等)。
- 以上配置经过 https://myssl.com/ 检测可获得 A 评级,开启HSTS后能够提升到A+。
其他配置
- 重定向所有http访问到https,该方法设置简单但存在可HTTPS降级攻击的问题,与配置HSTS二选一。
1 | $SERVER["socket"] == ":80" { |
- 配置HSTS可以解决HTTPS降级攻击,但需要确保永远提供的是HTTPS服务,否则之前的老用户在max-age过期前都会重定向到HTTPS,造成不能通过HTTP正确访问域名的情况
1 | server.modules += ( "mod_setenv" ) |
问题解决
非信任机构生成的证书将浏览器将显示不安全,信任链CA证书是给我们颁发公私钥的机构的信任证书
证书合并时格式错误出现无法读取的问题
1 | # 错误:SSL: couldn't read X509 certificate from '/etc/lighttpd/server.pem' |
配置HSTS中max-age的单位是秒,用来告诉浏览器在指定时间内,这个网站必须通过HTTPS协议来访问。也就是对于这个网站的HTTP地址,浏览器需要先在本地替换为HTTPS之后再发送请求。
更强的SSL设置请参考 https://cipherli.st/ 提供的Lighttpd示例
更多配置请点这 官方介绍