本指南将向您展示如何在 Red Hat Enterprise Linux 上使用 OpenSSL 命令行生成 CSR(证书签名请求)。此过程会生成两个文件:
- 一个私钥,它保留在您的服务器上,绝不共享。
- 一个CSR,当您向证书颁发机构(CA)订购证书时,需要将其发送给对方。
本文涵盖两种方法:适用于现代 OpenSSL 的单命令方法,以及适用于不支持内联扩展的旧版 OpenSSL 的配置文件方法。两种方法都会生成符合 SAN 标准、使用 SHA-256 签名的 CSR,这正是公共 CA 所要求的格式。
开始之前:检查您的 OpenSSL 版本
每个受支持的 RHEL 版本默认都包含 OpenSSL。请确认它已安装并检查版本,因为版本决定了您下面可以使用哪种方法:
openssl version
每个当前 Red Hat 版本随附的版本如下:
- RHEL 10(2025 年发布,当前的主要版本):OpenSSL 3.x
- RHEL 9:OpenSSL 3.x
- RHEL 8:OpenSSL 1.1.1
- RHEL 7:OpenSSL 1.0.2(RHEL 7 于 2024 年结束维护支持;请尽快将这些工作负载迁移到受支持的版本)
OpenSSL 1.1.1 和 3.x 都支持单命令方法中使用的内联扩展标志,因此在 RHEL 8、9 和 10 上,您可以使用下面的方案 A。如果 openssl version 显示的是 1.0.2 或更早版本(RHEL 7),请使用方案 B中的配置文件方法。
如果系统中没有安装 OpenSSL,请使用您所用版本对应的包管理器进行安装:
# RHEL 8, 9, and 10
sudo dnf install openssl
# RHEL 7
sudo yum install openssl
在 RHEL 8 及更高版本中,yum 是 dnf 的兼容别名,因此在这些版本上两个命令都可以使用。
方案 A:单命令方法(OpenSSL 1.1.1 和 3.x)
这是在 RHEL 8、9 和 10 上最快的方法。它首先生成私钥,然后构建 CSR,并将主题备用名称(SAN)以内联方式添加进去。
步骤 1:生成私钥
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out example.com.key
此操作会在当前目录中创建一个名为 example.com.key 的 2048 位 RSA 私钥。2048 位 RSA 是公共 CA 接受的最低标准;如果需要现代椭圆曲线密钥,可将算法选项替换为 -algorithm EC -pkeyopt ec_paramgen_curve:P-256。请妥善保管此文件:它保留在您的服务器上,绝不会发送给 CA。
步骤 2:创建带有 SAN 的 CSR
运行以下命令,并根据您自己的信息调整主题字段和域名:
openssl req -new -sha256 -key example.com.key -out example.com.csr
-subj "/C=US/ST=California/L=San Jose/O=Your Company LLC/CN=example.com"
-addext "subjectAltName=DNS:example.com,DNS:www.example.com"
将全文中的 example.com 替换为您的实际域名,并将主题字段设置为您自己的信息:
- C:两位国家代码(例如 US)。
- ST:完整的省份或州名称。
- L:城市或所在地。
- O:法定组织名称(对于单域名 DV 证书,可以省略)。
- CN:主要的完全限定域名,例如 www.example.com。
在 subjectAltName 值中列出证书必须覆盖的每个主机名。现代浏览器根据 SAN 列表而非通用名称进行验证,因此请在其中包含每个名称,包括主域名。该命令会将 CSR 写入 example.com.csr。
方案 B:配置文件方法(旧版 OpenSSL)
如果 openssl version 显示的版本不支持 -addext 标志(OpenSSL 1.0.2 及更早版本,如 RHEL 7 上的版本),则应改用一个小型配置文件来定义 SAN。
步骤 1:创建配置文件(san.cnf)
使用文本编辑器创建一个名为 san.cnf 的文件,并粘贴以下内容,同时编辑您的域名和组织的相关值:
[ req ]
default_bits = 2048
prompt = no
distinguished_name = dn
req_extensions = req_ext
[ dn ]
C = US
ST = California
L = San Jose
O = Your Company LLC
CN = example.com
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = example.com
DNS.2 = www.example.com
如需添加更多主机名,请继续编号:DNS.3、DNS.4,依此类推。
步骤 2:生成密钥和 CSR
生成私钥:
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out example.com.key
然后使用配置文件创建 CSR:
openssl req -new -sha256 -key example.com.key -out example.com.csr -config san.cnf
验证 CSR
在提交之前,请确认 CSR 包含正确的详细信息以及有效的签名。以下命令会打印主题信息、SAN 列表、密钥大小,并验证该请求的自签名:
openssl req -noout -text -verify -in example.com.csr
请检查 Subject 行和 X509v3 Subject Alternative Name 条目是否列出了您预期的每个域名,公钥是否至少为 2048 位 RSA(或 P-256 椭圆曲线密钥),以及签名算法是否为 SHA-256。显示 certificate request self-signature verify OK(旧版本显示为 verify OK)的行表示 CSR 和私钥匹配。如果您更喜欢使用浏览器进行操作,可以将 CSR 粘贴到我们的在线CSR 解码器中查看相同的详细信息。
提交 CSR
使用文本编辑器打开 example.com.csr 文件,并复制其全部内容,包括 -----BEGIN CERTIFICATE REQUEST----- 和 -----END CERTIFICATE REQUEST----- 标记行(每个标记两侧均使用五个连字符)。在向您的 SSL 供应商申请证书时,将整个内容块粘贴到订单表单中。
请将私钥文件 example.com.key 保留在服务器上。切勿将其发送给 CA,也不要粘贴到任何地方:它是密钥对中保密的那一半,绝不能脱离您的控制。CA 验证 CSR 并颁发证书后,请按照我们的Red Hat Linux SSL 安装说明进行安装。
常见问题
私钥会写入您在 -out 选项中指定的文件(例如 example.com.key),该文件位于您运行命令的目录中。它是在本地创建的,绝不会包含在 CSR 中。请将其备份到安全的地方并限制其权限,因为您需要这个确切的密钥来安装 CA 颁发的证书。
两者都被接受。2048 位 RSA 是广泛兼容的默认选项,也是公共 CA 允许的最低标准。椭圆曲线密钥(ECDSA P-256)体积更小、速度更快,同时提供同等的安全性;您可以将密钥选项替换为 -algorithm EC -pkeyopt ec_paramgen_curve:P-256 来生成它。无论采用哪种方式,CSR 都必须使用 SHA-256 签名,而上述命令已经做到了这一点。
-addext 标志是在 OpenSSL 1.1.1 中加入的。如果您使用的是更旧的版本(例如 RHEL 7 上的 OpenSSL 1.0.2),请使用方案 B 中的配置文件方法,该方法通过 san.cnf 文件而非命令行来定义主题备用名称。
在服务器上运行 openssl req -noout -text -verify -in example.com.csr。它会打印主题信息、完整的 SAN 列表、密钥类型和大小以及签名算法,并确认 CSR 与其私钥是否匹配。请在将 CSR 粘贴到订单表单之前查看这些字段。
请粘贴整个内容块,从 -----BEGIN CERTIFICATE REQUEST----- 到 -----END CERTIFICATE REQUEST-----(包括这两行),不要遗漏任何字符。两个标记行两侧均使用五个连字符。请勿粘贴私钥。
是的。AlmaLinux、Rocky Linux 和 CentOS Stream 与对应的 RHEL 版本二进制兼容,并附带相同的 OpenSSL,因此命令完全相同。如果您需要,我们还有专门的在 CentOS 上生成 CSR 的教程。

