bg-tutorials

如何在 lighttpd 上生成 CSR

本教程将向您展示如何在 lighttpd 上生成 CSR,即在运行 lighttpd Web 服务器的同一台服务器上使用 OpenSSL 命令行工具。您将通过一个命令创建两个文件:一个新的私钥和与之匹配的 CSR(证书签名请求),您需要将 CSR 提交给证书颁发机构(CA)。

以下步骤适用于每个附带 lighttpd 软件包的现代 Linux 发行版(Debian、Ubuntu、RHEL、AlmaLinux、Rocky Linux、Fedora、openSUSE、Alpine),因为它们都自带 OpenSSL 1.1.1 或 OpenSSL 3.x。这两个版本默认都使用 SHA-256 对请求进行签名,因此您无需添加摘要标志。同样的命令也适用于 FreeBSD 以及安装了 lighttpd 的 macOS。

第一步:连接到您的 lighttpd 服务器

在 macOS 或 Linux 上打开终端,或在 Windows 上打开 PowerShell 或 Windows Terminal,然后通过 SSH 连接到服务器。请将用户名和主机替换为您自己的:

ssh your-user@your-lighttpd-server

请在将托管该证书的同一台服务器上生成 CSR。私钥会随 CSR 一起创建,并且必须保留在该服务器上,因此如果您在自己的笔记本电脑上运行该命令,再将密钥复制过去,就失去了这样做的意义。您也可以在一个专门的目录中进行操作,以便日后能够方便地找到它,例如:

sudo mkdir -p /etc/lighttpd/ssl
cd /etc/lighttpd/ssl

第二步:生成私钥和 CSR

如果您已经使用其他工具生成了 CSR,请直接跳到在 lighttpd 上安装证书部分。

运行以下 OpenSSL 命令。它会一步创建一个 2048 位的 RSA 密钥和一个 CSR,主体信息和主题备用名称(SAN)都以内联方式提供,因此 OpenSSL 不会停下来提问:

openssl req -new -newkey rsa:2048 -nodes 
-keyout yourdomain.key 
-out yourdomain.csr 
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=yourdomain.com" 
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"

各部分的作用如下:

  • -newkey rsa:2048 生成一个新的 2048 位 RSA 密钥。2048 位是目前公共证书的最低要求;您也可以使用 rsa:4096 生成更大的密钥,或改用 ECDSA(见下文)。
  • -nodes 使私钥保持未加密状态,以便 lighttpd 在启动时可以直接读取它,而不会弹出密码提示。
  • -keyout 和 -out 分别指定私钥文件和 CSR 文件的名称。
  • -subj 提供证书主体信息。请在这里填写您真实的公司名称、州/省和城市,而不是占位符。CN(通用名称)是您的主域名。
  • -addext “subjectAltName=…” 列出证书需要覆盖的每一个主机名。公共 CA 会依据 SAN 列表进行验证,因此这里也要包含通用名称。

请在所有位置将 yourdomain.com 替换为您的实际域名。如果需要覆盖额外的主机名,请用逗号分隔,将它们添加到 SAN 列表中,例如 DNS:api.yourdomain.com。对于通配符证书,请同时包含通配符域名和裸域名:DNS:*.yourdomain.com,DNS:yourdomain.com。主体字段中只能使用字母数字字符,C 字段请使用官方的两字母国家代码。

如果您更倾向于使用 ECDSA 密钥(更小更快,且 P-256 得到广泛支持),可以改用如下方式生成密钥和 CSR:

openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -pkeyopt ec_param_enc:named_curve -nodes 
-keyout yourdomain.key 
-out yourdomain.csr 
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=yourdomain.com" 
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"

lighttpd 通过 mod_openssl 同时支持 RSA 和 ECDSA 证书,您可以通过列出两对 ssl.pemfile 和 ssl.privkey 指令,在同一个套接字上同时提供两种证书。

如果您希望逐个字段回答提示,可以运行 openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr,不带 -subj 也不带 -addext。OpenSSL 会依次询问每个字段。届时:

  • 国家名称(C):您所在国家的两字母 ISO 代码,例如 US 或 GB。对于商业验证(OV)或扩展验证(EV)证书,这必须是您组织注册所在的官方国家。
  • 省/州名称(ST):请填写全称,例如 Tennessee。不要使用缩写。
  • 地区名称(L):城市或城镇名称,例如 Nashville。
  • 组织名称(O):您公司正式注册的名称,例如 Your Company LLC。对于域名验证(DV)证书,您可以填写 NA。
  • 组织单位名称(OU):此字段已被弃用,公共 CA 会忽略它。请直接按 Enter 键留空。
  • 通用名称(CN):证书对应的完全限定域名(FQDN),例如 www.yourdomain.com。对于通配符证书,请使用 *.yourdomain.com。
  • 电子邮件地址:此项为可选,公共 CA 不会使用它。您可以留空。
  • 挑战密码和可选的公司名称:这两项都是已过时的属性,公共 CA 会忽略它们。请留空。

如果不使用 -addext 标志,生成的 CSR 将没有 SAN 条目。公共 CA 会依据 SAN 列表进行验证,对于没有 SAN 的请求,它们会拒绝(或悄悄地覆盖处理),因此建议采用上文中带内联 -subj 加 -addext 的命令。

第三步:定位您的文件

列出当前目录,确认两个文件都已创建:

ls

您应该会看到两个新文件:

  • yourdomain.key:您的私钥。请将它保存在服务器上,妥善做好安全备份,切勿发送给任何人,包括证书颁发机构。谁持有这个密钥,就能冒充您的网站。
  • yourdomain.csr:您的证书签名请求。这是您要提交给 SSL 提供商的文件。

限制私钥的访问权限,使其只能被文件所有者读取:

chmod 600 yourdomain.key

第四步:验证 CSR(可选,但推荐)

在提交 CSR 之前,请检查它是否包含正确的主体信息和 SAN,并确认其签名有效。以下命令会使用 OpenSSL 在本地解码该请求:

openssl req -noout -text -verify -in yourdomain.csr

请确认 Subject 一行显示的是您的信息,X509v3 Subject Alternative Name 列出了您所期望的每一个主机名,并且签名检查结果显示 verify OK。签名算法应显示为 sha256WithRSAEncryption(如果使用 ECDSA 密钥,则显示为 ecdsa-with-SHA256)。如果您不想使用命令行,也可以将 CSR 粘贴到我们的在线CSR 解码器中,通过浏览器查看相同的字段。

第五步:提交您的 CSR

要复制订单所需的 CSR 内容,请打印其内容:

cat yourdomain.csr

您将看到类似这样的一段文本:

-----BEGIN CERTIFICATE REQUEST-----
MIICyzCCAbMCAQAwTDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQsw...
...(many more lines of base64 characters)...
-----END CERTIFICATE REQUEST-----

请复制整段内容,包括 —–BEGIN CERTIFICATE REQUEST—– 和 —–END CERTIFICATE REQUEST—– 这两行(每个标记两侧各有五个连字符)。这整段内容就是您的 CSR。请在购买时将其粘贴到订单表单中,并将对应的私钥保留在服务器上。

如果您不想使用命令行,也可以使用我们的在线CSR 生成器来创建请求。请注意,它会在您的浏览器中生成私钥,因此请自行保存该密钥并将其转移到服务器上。

在您的 CA 验证完请求后,您将收到证书。根据验证级别的不同,域名验证(DV)通常只需几分钟,而商业验证(OV)和扩展验证(EV)则可能需要长达数个工作日。

第六步:在 lighttpd 上安装证书

当证书送达后,请将颁发的证书及其中间证书链与私钥一起放在服务器上,然后在 TLS 套接字配置块中指向这些文件。在当前版本的 lighttpd 中,TLS 支持位于 mod_openssl 模块中,推荐的格式(自 lighttpd 1.4.53 引入 ssl.privkey 以来)是将证书加证书链放在一个文件中,私钥放在另一个单独的文件中:

server.modules += ( "mod_openssl" )

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

ssl.pemfile 文件应包含您的证书,后面紧跟中间证书(可以使用 cat yourdomain.crt yourdomain.ca-bundle > yourdomain.fullchain.pem 命令来创建它)。将证书和私钥合并到同一个 ssl.pemfile 文件中的旧式单文件格式,在较老的版本中仍然可用,但分离文件的格式更符合证书颁发机构提供文件的方式,也是官方文档推荐的做法。使用 sudo lighttpd -t -f /etc/lighttpd/lighttpd.conf 测试配置,然后重启 lighttpd 以应用更改。有关完整的操作流程,请参阅我们的在 lighttpd 上安装 SSL 证书指南。

立即订购 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.