本教程展示如何在 Apache 上生成 CSR,方法是在运行 Apache HTTP Server 的同一台服务器上使用 OpenSSL 命令行。你将通过一条命令创建两个文件:一个新的私钥,以及与之匹配的 CSR(证书签名请求),你需要将其提交给你的证书颁发机构。
以下步骤适用于每一个托管 Apache 的现代 Linux 发行版(Ubuntu、Debian、RHEL、AlmaLinux、Rocky Linux、Amazon Linux 2023),因为它们都自带 OpenSSL 1.1.1 或 OpenSSL 3.x。这两个版本默认都使用 SHA-256 对请求进行签名,因此你无需添加摘要标志。同样的命令也适用于 FreeBSD 以及运行 Apache 的 macOS。
第一步:连接到你的 Apache 服务器
在 macOS 或 Linux 上打开终端(Terminal),或在 Windows 上打开 PowerShell 或 Windows Terminal,然后通过 SSH 连接到服务器。将用户名和主机替换为你自己的信息:
ssh your-user@your-apache-server
在将托管该证书的同一台服务器上生成 CSR。私钥会与 CSR 一起被创建,并且必须留在该服务器上,因此如果在笔记本电脑上运行该命令,然后再复制私钥,就失去了意义。你也可以在一个便于日后查找的专用目录中进行操作,例如:
sudo mkdir -p /etc/ssl/yourdomain
cd /etc/ssl/yourdomain
第二步:生成私钥和 CSR
如果你已经使用其他工具生成了 CSR,请直接跳转到在 Apache 上安装证书。
运行以下 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 使私钥保持未加密状态,以便 Apache 在启动时可以读取它,而不需要输入密码短语。
- -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"
如果你更愿意逐个字段回答提示,可以运行 openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr,不带 -subj 也不带 -addext。OpenSSL 会依次询问每个字段。此时:
- 国家名称(C):你所在国家的两字母 ISO 代码,例如 US 或 GB。对于组织验证型或扩展验证型证书,这必须是你组织的官方注册所在国。
- 州或省名称(ST):完整名称,例如 California。请不要使用缩写。
- 地区名称(L):所在城市或城镇,例如 San Francisco。
- 组织名称(O):你公司的官方注册名称,例如 GPI Holding LLC。对于域名验证型证书,可以填写 NA。
- 组织单位名称(OU):该字段已被弃用,公共 CA 会忽略它。直接按 Enter 键留空即可。
- 通用名称(CN):证书所对应的完全限定域名,例如 www.yourdomain.com。对于通配符证书,请使用 *.yourdomain.com。
- 电子邮件地址:可选项,公共 CA 不会使用该信息。你可以留空。
- 挑战密码和可选的公司名称:这两个都是过时的属性,公共 CA 会忽略它们。请留空。
如果不使用 -addext 标志,生成的 CSR 将没有任何 SAN 条目。公共 CA 会根据 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 验证该请求后,你将收到证书。根据验证级别的不同,域名验证通常只需几分钟,而组织验证和扩展验证可能需要长达数个工作日。
第六步:在 Apache 上安装证书
证书到达后,将签发的证书(包括合并到一个完整链文件中的任何中间证书)和私钥放置在服务器上,然后在你网站的虚拟主机配置中指向它们:
SSLCertificateFile /etc/ssl/yourdomain/fullchain.crt
SSLCertificateKeyFile /etc/ssl/yourdomain/yourdomain.key
现代版本的 Apache(2.4.8 及更高版本)会从传递给 SSLCertificateFile 的单个文件中读取叶证书和所有中间证书,因此请将你的证书和 CA 证书包合并到一个文件中。旧的 SSLCertificateChainFile 指令已被弃用,不应在当前版本的 Apache 中使用。使用 apachectl configtest 测试配置,然后重新加载 Apache 以应用更改。要了解完整的操作流程,请参阅我们的如何在 Apache 上安装 SSL 证书指南。


