前言
Lighttpd是一个安全的、快速的、兼容的,和非常灵活的Web服务器,已为高性能环境做了很多优化。它具有非常低的内存占用,相比其他网络服务器的CPU负载。
本文撰写的时候Lighttpd的最新版本是1.4.43,我们将主要以此版本为例介绍安装方式,可能会略有不同,详细还应当以官方文档为准。
接收证书
您会收到一封来自迅通诚信的邮件,证书内容附在邮件中,请在邮件的最后,找到以:“-----BEGIN CERTIFICATE-----”开头的一段文本,请将此部分的内容复制出来用Notepad存成一个纯文本文件。(注意:不要将其存成Microsoft Word 或其它字处理软件格式,并确定证书内容中不含有空行和空格,)文件名可以为server.crt 或者 server.cer (crt和cer都是证书的可用扩展名是等效的)。如下所示:
证书准备
请使用我们的在线PEM合成工具将server.key和server.crt合成一个PEM文件。请先选中以下2个选项:
- PEM文件包括密钥(KEY)
- PEM文件包括证书(CRT/CER)
然后会出现2个文本输入框,以及另外2个选项:“对密钥加密”和“自动添加 中间证书”。请确保这2个选项都没有被选中。输入server.key和server.crt后,点击“合成PEM文件”,下载合成好的文件保存为:server.pem。
查找中间证书
为了确保兼容到所有浏览器,我们必须部署中间证书,如果不这么做,虽然安装过程并不会报错,但可能导致Android系统,Chrome 和 Firefox等浏览器无法识别。请到 中间证书下载工具,输入您的Server.crt,然后下载中间证书,请将中间证书保存为Chain.crt。
配置Lighttpd.conf参数
SSL参数说明
参数 | 用途 |
ssl.engine | 是否开启SSL。 值:enable / disable |
ssl.pemfile |
SSL证书文件,应该同时包含SSL私钥和证书,如我们上面合成好的server.pem。 |
ssl.ca-file |
中间证书文件。如我们上面存好的chain.crt。 |
ssl.use-sslv2 |
值:enable/disable。是否支持SSL2.0。只在1.4.21以前有效,其后版本已经禁用。 |
ssl.use-sslv3 | 值:enable/disable。是否支持SSL3.0。只在1.4.29以后有效。 |
ssl.cipher-list | 配置允许的SSL加密套件 |
标准配置
$SERVER["socket"] == ":443" { server.document-root = "/www/servers/www.example.org/secure/" ssl.engine = "enable" ssl.pemfile = "/etc/lighttpd/ssl/server.pem" ssl.ca-file = "/etc/lighttpd/ssl/chain.crt" ssl.use-sslv2 = "disable" ssl.use-sslv3 = "disable" 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" }
通配符和多域名证书配置
如果我们要在一个IP上部署一个SAN或者Wildcard证书,来实现同时支持多个虚拟站点,这是一种很常见,也是兼容性非常好的部署方法,假设我们已经有一个证书,Server.pem,其中包含3个SANs:
- www.example.com
- mail.example.com
- www.example.cn
$SERVER["socket"] == ":443" { ssl.engine = "enable" ssl.pemfile = "/etc/lighttpd/ssl/server.pem" ssl.ca-file = "/etc/lighttpd/ssl/chain.crt" $HTTP["host"] == "www.example.com" { server.document-root = "/var/www/servers/www.example.com/pages/" } $HTTP["host"] == "mail.example.com" { server.document-root = "/var/www/servers/mail.example.com/pages/" } $HTTP["host"] == "www.example.cn" { server.document-root = "/var/www/servers/www.example.cn/pages/" } }
自动跳转到HTTPS
示例1,全部跳转到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") } }
示例2,指定url
$HTTP["scheme"] == "http" { $HTTP["host"] =~ ".*" { url.redirect = ("^/phpmyadmin/.*" => "https://%0$0") } }
示例3,指定虚拟站点和url
$HTTP["scheme"] == "http" { $HTTP["host"] == "sth.example.com" { url.redirect = ("^/phpmyadmin/.*" => "https://sth.example.com$0") } }
参考文档
http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_SSL
https://raymii.org/s/tutorials/Strong_SSL_Security_On_lighttpd.html
文档编写日期:2016年12月26日