bg-tutorials

如何在 lighttpd 上安装 SSL 证书

在本教程中,你将学习如何在 Lighttpd 上安装 SSL 证书。本指南涵盖当前的配置方式(使用 mod_openssl 模块分别配置证书和私钥)、适用于旧版本的传统合并 PEM 方法,以及重启前的快速配置测试。

我们还录制了一段视频,详细讲解了整个过程。如果你更喜欢文字版说明,请继续阅读下文。

在 Lighttpd 上生成 CSR 代码

我们先从 CSR(证书签名请求)的生成开始。CSR 是一段编码文本,你需要将其发送给证书颁发机构以申请 SSL 证书。你有两种选择:

用任意文本编辑器打开 CSR 文件,复制其全部内容(包括 BEGIN CERTIFICATE REQUEST 和 END CERTIFICATE REQUEST 这两行),粘贴到 SSL 订购流程中对应的框内。将 CSR 提交给证书颁发机构,等待验证。CA 签发 SSL 证书后,继续按照下方步骤进行安装。

在 Lighttpd 上安装 SSL 证书

第一步:准备证书文件

验证通过后,证书颁发机构会通过邮件把证书文件发给你。下载压缩包并解压。你应该会得到以下文件:

  • yourdomain.crt,你的主 SSL 证书。
  • yourdomain.ca-bundle,中间证书(即CA 证书包)。
  • yourdomain.key,生成 CSR 时创建的私钥。

Lighttpd 建议 ssl.pemfile 所指向的文件应包含完整的证书链:先是你的证书,然后是中间证书。创建该合并的证书链文件,然后将其与私钥一起移动到 Lighttpd 可读取的目录中(例如 /etc/lighttpd/ssl/):

cat yourdomain.crt yourdomain.ca-bundle > yourdomain.fullchain.pem
sudo mkdir -p /etc/lighttpd/ssl
sudo cp yourdomain.fullchain.pem yourdomain.key /etc/lighttpd/ssl/

限制私钥的访问权限,使其仅可由 root 读取:

sudo chmod 600 /etc/lighttpd/ssl/yourdomain.key

第二步:启用 mod_openssl

自 1.4.56 版本起,Lighttpd 的 TLS 支持功能位于一个名为 mod_openssl 的可加载模块中(此外还存在 mod_mbedtlsmod_wolfsslmod_gnutlsmod_nss 等其他后端)。在 SSL 套接字块之前,在主配置文件中加载该模块:

server.modules += ( "mod_openssl" )

注意:在 1.4.55 及更早版本的 Lighttpd 中,TLS 是内置编译的,而不是作为模块加载的,因此在这些版本中可以跳过此行。可通过 lighttpd -v 检查你的版本。

第三步:编辑 lighttpd.conf

用你喜欢的编辑器打开主配置文件(路径通常为 /etc/lighttpd/lighttpd.conf):

sudo nano /etc/lighttpd/lighttpd.conf

为 443 端口添加一个套接字块。在当前版本的 Lighttpd(1.4.56 及以上)中,证书链和私钥应保存在各自独立的文件中:将 ssl.pemfile 指向完整证书链文件,将 ssl.privkey 指向私钥文件。这也是大多数证书颁发机构提供文件的格式,也是 Lighttpd 推荐的配置方式。

$SERVER["socket"] == ":443" {
    ssl.engine  = "enable"
    ssl.pemfile = "/etc/lighttpd/ssl/yourdomain.fullchain.pem"
    ssl.privkey = "/etc/lighttpd/ssl/yourdomain.key"

    # Minimum TLS version (ssl-conf-cmd needs lighttpd 1.4.48+; TLS 1.2 is already the default on 1.4.56+)
    ssl.openssl.ssl-conf-cmd = ( "MinProtocol" => "TLSv1.2" )
}
  • ssl.engine 用于为此套接字启用 TLS。
  • ssl.pemfile 包含你的证书,后接中间证书链。
  • ssl.privkey 包含私钥。自 1.4.53 版本起,只要私钥不在 pemfile 内,就必须使用该项。

为了将普通 HTTP 请求重定向到 HTTPS,确保访客始终访问安全版本网站,请为 80 端口添加重定向规则(这需要 mod_redirect 模块,大多数发行版默认已加载该模块):

$SERVER["socket"] == ":80" {
    url.redirect = ( "^/(.*)" => "https://yourdomain.com/$1" )
}

保存并关闭文件。

传统方法:合并 PEM 文件与 ssl.ca-file

较旧的 Lighttpd 1.4.x 版本(1.4.53 之前)使用的是单一的合并 PEM 文件,其中证书和私钥拼接在一起,中间证书链则通过 ssl.ca-file 单独提供。如果你正在维护此类旧系统,可以像下面这样创建合并文件:

cat yourdomain.crt yourdomain.key > /etc/lighttpd/ssl/yourdomain.pem

然后在套接字块中引用该文件:

$SERVER["socket"] == ":443" {
    ssl.engine  = "enable"
    ssl.pemfile = "/etc/lighttpd/ssl/yourdomain.pem"
    ssl.ca-file = "/etc/lighttpd/ssl/yourdomain.ca-bundle"
}

在当前版本的 Lighttpd 中,建议使用第三步中所述的独立 ssl.pemfilessl.privkey 形式,并将完整证书链保存在 pemfile 中。ssl.ca-file 指令在 1.4.60 版本中已重命名为 ssl.verifyclient.ca-file,因为它的真正用途是验证客户端证书,而不是提供服务器端的证书链。

第四步:测试配置

在重启之前,务必检查语法,因为错误可能会导致服务器无法启动。运行:

sudo lighttpd -t -f /etc/lighttpd/lighttpd.conf

你应该会看到语法正确的提示消息。如需进行更深入的检查(同时加载并初始化模块),可使用 sudo lighttpd -tt -f /etc/lighttpd/lighttpd.conf。在继续之前,请修复所有报告的错误。

第五步:重启 Lighttpd

使更改生效。在使用 systemd 的现代系统上,重启服务:

sudo systemctl restart lighttpd

在使用 SysV init 的旧系统上,请使用初始化脚本:

sudo /etc/init.d/lighttpd restart

恭喜,你的 SSL 证书现已成功安装在 Lighttpd 上。如需确认安装结果并获取即时状态报告,请使用我们的SSL Checker,或浏览我们完整的SSL 工具集。如需了解高级选项,请参阅官方的Lighttpd SSL 文档

常见问题

Lighttpd 使用的是合并 PEM 文件,还是证书与私钥分离的文件?

当前版本的 Lighttpd(1.4.56 及以上)建议使用分离的文件:证书及其中间证书链保存在 ssl.pemfile 指定的文件中,私钥保存在 ssl.privkey 中。旧版将证书和私钥拼接到同一个 ssl.pemfile 的合并方式依然可用,但分离形式更符合大多数证书颁发机构提供文件的方式,也是官方文档推荐的做法。

中间证书链是否仍需要 ssl.ca-file?

不需要。目前推荐的做法是直接将中间证书包含在 ssl.pemfile 文件中,紧跟在你的证书之后。ssl.ca-file 指令是过去用来在 pemfile 只包含叶证书时补全证书链的一种方式,在 1.4.60 版本中已被重命名为 ssl.verifyclient.ca-file,因为它的真正作用是验证客户端证书。

重启 Lighttpd 之前如何检查配置?

运行 sudo lighttpd -t -f /etc/lighttpd/lighttpd.conf 来测试语法,或使用 sudo lighttpd -tt -f /etc/lighttpd/lighttpd.conf 进行更深入的测试(同时会加载模块)。在重启之前修复所有报告的错误,以避免因拼写错误导致服务器无法启动。

为什么我的浏览器在 Lighttpd 上显示证书链不完整?

这通常意味着你的 ssl.pemfile 中缺少中间证书。请将你的证书与 CA 证书包合并到同一个文件中(证书在前),并将 ssl.pemfile 指向该文件。然后测试配置并重启。你可以使用我们的SSL Checker确认证书链是否完整。

如何验证 SSL 证书是否已安装在 Lighttpd 上?

使用 OpenSSL 连接你的网站并读取其提供的证书:
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -issuer -dates
如果证书已安装,此命令会打印出证书的颁发者和有效期。你也可以在浏览器中打开你的网站,检查地址栏的锁形图标。

立即订购 SSL 证书, 可节省 10% 的费用!

快速发行, 强大加密, 99.99% 的浏览器信任度, 专业支持和 25 天退款保证. 优惠券代码 SAVE10

龙飞行的详细图像
撰写人

经验丰富的内容撰稿人, 擅长 SSL 证书. 将复杂的网络安全主题转化为清晰, 引人入胜的内容. 通过有影响力的叙述, 为提高数字安全作出贡献.