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.pemfilessl.privkey 指令,在同一个套接字上同时提供两种证书。

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

  • 国家名称(C):您所在国家的两字母 ISO 代码,例如 USGB。对于商业验证(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 证书. 将复杂的网络安全主题转化为清晰, 引人入胜的内容. 通过有影响力的叙述, 为提高数字安全作出贡献.