配置 Web 站点及 HTTPS 访问

作者 huhamhire,暂无评论,2013年3月2日 16:25 折腾历程

在上一篇 VPS 折腾记录中介绍配置 phpMyAdmin 的管理入口时,其实已经简单地描述了 lighttpd 配置 Web 服务器的方法。所以在这篇文章中,这一块内容就只做一个简单的介绍了。这一篇的重点会放在 HTTPS 的配置上。至于 VPS 所使用的软件环境,可以参考前面的几篇文章。在这一篇记录中,我将使用 huhamhire-hosts 主站的配置作为一个详细的真实案例作为参考。

一、配置基本的 Web 站点

由于我们之前已经在 /etc/lighttpd/lighttpd.conf 做了包含 vhosts 目录下所有配置文件的设置:


include_shell "cat /etc/lighttpd/vhosts.d/*.conf"

所以,如果需要配置更多的站点,仅需添加新的 *.conf 配置文件即可。

以 huhamhire-hosts 主站为例,可以在 /etc/lighttpd/vhosts.d/hosts.conf 中配置如下的内容:


1 # Connection to huhamhire-hosts without SSL
2 $HTTP["host"] == "hosts.huhamhire.com" {
3     server.document-root = "/var/www/hosts/"
4     server.name = "hosts.huhamhire.com"
5     accesslog.filename = "/var/www/logs/hosts_access.log"
6 }

其中访问日志文件的位置为可选参数。将网站的相关文件放到 /var/www/hosts/ 下之后,重启 lighttpd 服务即可访问站点。


service lighttpd restart

这样,一个基本的网站就配置好了,下面具体介绍 HTTPS 的配置。

二、SSL 证书的申请与获取

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版。即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL ,因此加密的详细内容就需要 SSL 。当然,用到了 SSL 就离不开 SSL 证书了,所以首先就是获取 SSL 证书。

SSL 证书的获取无外乎是自主生成或者是通过相关的认证机构获取。自主生成的证书不建议作为公开站点的加密证书使用,虽然在安全性上面也没啥问题,但是由服务器自己签发的证书是不会被大多数浏览器直接认可的,在通过https访问时会出现证书警告(如图)。

cert_err

在众多提供可信任 SSL 认证服务的 CA 机构中,有一家名为 StartSSL 的机构提供了仅有的免费可信证书服务,可以让我们在做小型网站的时候免去一笔 SSL 认证费用。StartSSL 证书的强大之处是可以不花一分钱,直接通过大多数浏览器的安全认证。具体申请的流程较为繁琐,可以参考 http://www.chinaz.com/free/2010/1111/142581.shtml 的介绍,本文就不一一说明了。

一般情况下可以从 StartSSL 获取到四个文件,分别是 ssl.key 私钥、ssl.crt 加密证书以及 ca.pemsub.class1.server.ca.pem 两个 CA 机构链接证书。

三、使用 lighttpd 配置站点的 HTTPS 访问

在开始部署证书之前,建议可以使用 StartSSL 提供的 Decrypt Private Key 工具将私钥解密后另存为 ssl_decrypted.key 文件,可以免去在每次启动服务的时候被提示输入密码。

也可以在服务器端使用以下命令解锁:


openssl rsa -in ssl.key -out ssl_decrypted.key

由于 lighttpd 在 SSL 证书的管理方面,相比于 Apache 仅提供了较为简单的设置,所以在获取了证书文件后,还需要将证书处理为 lighttpd 能够使用的文件。

首先是将解锁的私钥 ssl_decrypted.key 合并到 SSL 证书 ssl.crt 中去


cat ssl.key >> ssl.crt

随后还要将两个CA链接文件合并为 ca-certs.crt


cat sub.class1.server.ca.pem ca.pem >> ca-certs.crt

随后将证书文件放到服务器上的指定位置。在这里,我将 ssl.crt 放至 /etc/lighttpd/certs/hosts/ssl.crt,将 ca-certs.crt 放至 /etc/lighttpd/certs/ca-certs.crt 。具体位置看因人而异,只要后面设置的时候指向正确即可。

接下来,进行 lighttpd 的相关设置。编辑 /etc/lighttpd/vhosts.d/hosts.conf


nano /etc/lighttpd/vhosts.d/hosts.conf

在配置文件中加入如下内容:


 1 # IPv4 Connection to huhamhire-hosts with SSL
 2 $SERVER["socket"] == "192.73.232.216:443" {
 3     server.document-root = "/var/www/hosts/"
 4     server.name = "hosts.huhamhire.com"
 5     accesslog.filename = "/var/www/logs/hosts_access.log"
 6 
 7     ssl.engine = "enable"
 8     ssl.ca-file = "/etc/lighttpd/certs/ca-certs.crt"
 9     ssl.pemfile = "/etc/lighttpd/certs/hosts/ssl.crt"
10 }

首先要说明的是,由于 HTTPS 在 lighttpd 中运行在较低的网络层子层上,服务器并不能直接解析域名,所以正常情况下无法将域名与 443 端口的请求绑定,只能将服务器的 IP 与相应端口绑定,也就是说一个 IP 只能提供一个 HTTPS 服务。因此这里采用了 $SERVER["socket"] == "192.73.232.216:443" 对服务进行定义。

在定义的内容中,前三行与常规站点的设置一致,主要是后面的内容。ssl.engine 控制服务器的 SSL 加密服务,ssl.ca-filessl.pemfile 则是控制的加密所使用的证书文件,只要文件路径与服务器上的证书存放路径一致即可。

配置完成之后,重启服务,便可通过证书中绑定的域名,使用 HTTPS 方式访问相关的站点了。


service lighttpd restart

可以通过浏览器看到相关安全信息:

https

四、配置 IPv6 站点:

如果服务器存在有 IPv6 地址,还可以对 IPv6 站点进行配置。其实在设置基本的 web 服务站点时,如果采用了通过域名的识别,其功能已经涵盖了对 IPv6 通道上 Web 服务请求的相应,剩下来的其实也仅仅是对 HTTPS 的设置。

同配置 IPv4 的 HTTPS 功能一致,编辑 /etc/lighttpd/vhosts.d/hosts.conf


nano /etc/lighttpd/vhosts.d/hosts.conf

加入如下内容即可:


 1 # IPv6 Connection to huhamhire-hosts with SSL
 2 $SERVER["socket"] == "[2604:180::fd98:6cba]:443" {
 3     server.document-root = "/var/www/hosts/"
 4     server.name = "hosts.huhamhire.com"
 5     accesslog.filename = "/var/www/logs/hosts_v6_access.log"
 6 
 7     ssl.engine = "enable"
 8     ssl.ca-file = "/etc/lighttpd/certs/ca-certs.crt"
 9     ssl.pemfile = "/etc/lighttpd/certs/hosts/ssl.crt"
10 }

重启服务,便可由 IPv6 方式访问我们的网站:


service lighttpd restart
关键词:lighttpd , SSL , 虚拟主机
登录后进行评论