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_mbedtls、mod_wolfssl、mod_gnutls 和 mod_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.pemfile 和 ssl.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 证书. 将复杂的网络安全主题转化为清晰, 引人入胜的内容. 通过有影响力的叙述, 为提高数字安全作出贡献.

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.