bg-tutorials

如何在NGINX上生成CSR

本教程将向您展示如何在 NGINX 上生成 CSR。NGINX 本身不生成证书签名请求:您需要在将托管证书的同一台服务器上使用 OpenSSL 创建私钥和 CSR,然后将 CSR 提交给证书颁发机构。收到签发的证书后,通过 ssl_certificate 和 ssl_certificate_key 指令将 NGINX 指向该证书。

以下步骤适用于每个搭载 NGINX 的受支持 Linux 发行版(Debian、Ubuntu、RHEL、AlmaLinux、Rocky Linux、Amazon Linux),因为它们都自带 OpenSSL 1.1.1 或 3.x 版本。现代 OpenSSL 默认使用 SHA-256 对请求进行签名,因此您无需添加摘要标志。

步骤 1:连接到您的 NGINX 服务器

从您的本地计算机通过 SSH 连接到运行 NGINX 的服务器(macOS 或 Linux 上使用终端,Windows 上使用 PowerShell 或 Windows Terminal)。将用户名和主机替换为您自己的:

ssh your-user@your-nginx-server

在将提供证书服务的服务器上生成 CSR。私钥会与 CSR 一起创建,并且必须保留在该服务器上。在本地运行这些命令然后再将密钥复制过去,会失去拥有私钥的意义。

步骤 2:生成私钥和 CSR

运行以下命令。它一步生成 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 位是目前公共 CA 接受的最低标准;您可以使用 rsa:4096 生成更大的密钥,或改用 ECDSA(见下文)。
  • -nodes 使私钥保持未加密状态,以便 NGINX 在启动时可以读取它而无需输入密码短语提示。如果您希望加密密钥,请去掉 -nodes,并使用 NGINX 的 ssl_password_file 指令在启动和重载时提供密码短语。
  • -keyout 和 -out 用于命名私钥文件和 CSR 文件。
  • -subj 提供证书主体信息。此处请填写您真实的公司名称、州/省和城市,而不是占位符。CN(通用名称)是您的主域名。
  • -addext “subjectAltName=…” 列出证书必须覆盖的每个主机名。公共 CA 会根据 SAN 列表进行验证,因此也应在此处包含通用名称。-addext 标志需要 OpenSSL 1.1.1 或更新版本;每个受支持的 Linux 版本至少都自带此版本。

请在整个过程中将 yourdomain.com 替换为您的实际域名。要覆盖其他主机名,请在 SAN 列表中用逗号分隔添加,例如 DNS:api.yourdomain.com。对于通配符,请同时包含通配符和裸域名:DNS:*.yourdomain.com,DNS:yourdomain.com。

如果您更倾向于使用 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"

如果您的 OpenSSL 不支持 -addext

在使用 OpenSSL 1.1.1 之前旧版本的老旧系统上,-addext 标志不可用。请创建一个名为 san.cnf 的小型配置文件,内容如下:

[ req ]
default_bits       = 2048
prompt             = no
default_md         = sha256
distinguished_name = dn
req_extensions     = req_ext

[ dn ]
C  = US
ST = YourState
L  = YourCity
O  = YourCompany
CN = yourdomain.com

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = yourdomain.com
DNS.2 = www.yourdomain.com

然后运行:

openssl req -new -newkey rsa:2048 -nodes 
-keyout yourdomain.key -out yourdomain.csr -config san.cnf

步骤 3:定位您的文件

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

ls

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

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

立即为私钥设置严格的权限,使只有 root 才能读取它:

sudo chmod 600 yourdomain.key
sudo chown root:root yourdomain.key

步骤 4:验证 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 解码工具中,在浏览器中查看相同的字段信息。

步骤 5:提交您的 CSR

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

cat yourdomain.csr

您将看到如下一段文本:

-----BEGIN CERTIFICATE REQUEST-----
MIIBozCB... (a long string of characters)
-----END CERTIFICATE REQUEST-----

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

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

CA 签发证书后会发生什么

一旦 CA 验证了 CSR 并签发了证书,您通常会收到您的服务器证书(一个以您的域名命名的 .crt 文件)以及一个或多个中间证书,有时会打包成一个 .ca-bundle 文件。NGINX 期望将服务器证书和中间证书链合并为一个文件(即”fullchain”),并通过 ssl_certificate 指向该文件;您上面生成的私钥则通过 ssl_certificate_key 单独指向。完整的操作流程(构建 fullchain、编辑服务器配置块、测试和重载)请参阅我们的NGINX 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.