什么是证书签名请求(CSR)?
证书签名请求(Certificate Signing Request,CSR)是申请 SSL/TLS 证书时提交给证书颁发机构(CA)的一份标准化请求数据。
申请 SSL 证书时,管理员常被要求提交一段以 -----BEGIN CERTIFICATE REQUEST----- 开头的文本,这就是 CSR。它是一份申请数据,不是证书,也不含私钥,作用是向 CA 说明你希望申请的证书信息和你的公钥。
CSR 采用 PKCS#10 格式,包含申请者的公钥、Subject 信息以及可选的扩展请求,并使用与公钥对应的私钥签名;它不包含私钥。CSR 的作用是向 CA 说明"我希望申请这样的证书,这是我的公钥,我能证明自己持有对应私钥",但它本身不能证明申请者拥有某个域名,域名控制权和组织身份需要 CA 按证书类型和验证规则另外确认。CA 收到 CSR 后不会完全照单签发,最终证书的域名与组织信息由证书类型、验证结果和签发政策决定。
CSR 里面包含什么?
典型 CSR 包含以下信息:
| 字段 | 作用 |
|---|---|
| Subject | 申请者提交的主体信息 |
| Common Name(CN) | CSR 中的传统名称字段 |
| Organization(O) | 组织名称 |
| Organizational Unit(OU) | 组织单位 |
| Locality(L) | 城市/地区 |
| State/Province(ST) | 州、省或地区 |
| Country(C) | 国家/地区代码 |
| Public Key | 与私钥对应的公钥 |
| Signature Algorithm | CSR 使用的签名算法 |
| Requested Extensions | 请求加入证书的扩展信息,如 SAN |
对网站 SSL/TLS 证书来说,SAN(Subject Alternative Name)比 CN 更重要。浏览器做域名匹配时重点检查的是证书中的 SAN,而不是单纯看 CN,现代证书申请中不应该把 CN 理解成唯一或主要的域名匹配字段。CSR 生成的细节可以看上一篇解码CSR是什么意思的思路,本地解析检查用 openssl req 即可。
CSR 和私钥是什么关系?
生成 CSR 时先产生密钥对:公钥写入 CSR,私钥由申请者自行保存,CSR 用对应私钥签名。CA 收到 CSR 后,通过签名验证请求创建者是否拥有对应私钥。
但这里要分清:CSR 签名只能证明"申请者控制与 CSR 中公钥对应的私钥",不能证明"申请者拥有 CSR 中写入的域名"。CSR 里写了 example.com,CA 仍然要通过 DNS、HTTP 等方式验证申请者对域名的控制权。
CSR 和 SSL 证书有什么区别?
两者的关系是:CSR → 提交给 CA → CA 验证 → 签发 → SSL/TLS 证书。
| 项目 | CSR | SSL/TLS 证书 |
|---|---|---|
| 作用 | 请求 CA 签发证书 | CA 签发的正式数字证书 |
| 是否包含公钥 | 是 | 是 |
| 是否包含私钥 | 否 | 否 |
| 由谁签名 | 申请者密钥签名 | CA 签名 |
| 是否可直接部署 HTTPS | 否 | 是 |
| 是否证明域名已验证 | 否 | 取决于 CA 验证结果 |
CSR 是申请证书时使用的请求文件,SSL 证书是 CA 完成验证后签发的数字证书,不能把 CSR 直接当证书部署到 Nginx、Apache 或 Tomcat。证书本身的定义可以参考SSL 证书的定义,部署操作见证书部署操作步骤。
另外,CA 不会完全按 CSR 内容签发。CSR 里的内容属于申请请求,最终证书由 CA 根据证书产品类型、签发政策、域名验证结果、组织验证结果和行业标准决定。申请 OV 证书时,CSR 中的组织名称要经过 CA 组织身份验证,CSR 里写了什么不等于最终证书一定原样写入什么。
CSR 怎么生成?
用 OpenSSL 生成。先生成 RSA 私钥:
openssl genrsa -out private.key 2048
再用私钥生成 CSR:
openssl req -new -key private.key -out example.csr
生成过程会提示输入 Country Name、State、Locality、Organization、Organizational Unit、Common Name 等信息。多域名证书还需要按 OpenSSL 配置文件或证书管理工具生成 SAN。
手动生成不是唯一方式。Certbot、acme.sh、宝塔、云厂商证书服务和企业证书管理平台都会自动生成密钥和 CSR,ACME 自动化流程中用户甚至不需要手动打开 CSR 文件。CSR 仍是标准申请机制中的重要数据,但手动生成已经不是申请证书的唯一方式。
DV、OV、EV 和 CSR 是什么关系?
CSR 是申请请求格式,DV、OV、EV 是验证类型,两者不在一个维度。
DV 证书主要验证域名控制权,CA 通过 DNS-01、HTTP-01、TLS-ALPN-01 等方式确认申请者控制域名。OV 证书在域名验证之外还做组织身份验证,CSR 里填的组织名称不能代替 OV 审核。EV 证书按 EV Guidelines 执行更严格的组织身份验证。
整体流程是:CSR + 域名验证 + 组织验证(视证书类型)→ CA 签发。CSR 是申请材料之一,不是整个验证过程。各验证类型的差异可以参考DV/OV/EV 的验证内容差异。
CSR 生成后的检查与修改
提交前检查四件事:
- 域名:确认没有拼写错误,多域名申请重点看 SAN 列表。
- 公钥算法和密钥长度:RSA、ECDSA 等符合 CA 当前要求。
- Subject 信息:申请 OV/EV 时组织名称等与正式企业资料一致。
- 私钥:确认已安全保存,不要和 CSR 一起发给 CA。
查看 CSR 内容:
openssl req -in example.csr -noout -text
检查 Subject、公钥算法、SAN 请求等,工具见CSR 解析与证书检测工具。
CSR 不能直接修改文本。PEM 格式看起来像 Base64 文本,但数据经过结构化编码和签名,直接改域名、组织名称会让签名失效。正确做法是重新生成 CSR,提交正确的信息后重新申请。
常见问题解答
CSR 文件包含 SSL 证书私钥吗?
不包含。CSR 里是公钥、申请信息和用对应私钥生成的签名。私钥由申请者自行保存,不能提交给 CA 或上传到在线解码平台。
CSR 中的 CN 就是证书的域名吗?
CN 可以填域名,但现代 TLS 证书的域名匹配主要依据 SAN。申请多域名或通配符证书时,重点检查 SAN 和最终证书中的 SAN。
CSR 生成后发现域名写错了怎么办?
不能直接修改 CSR 文件。重新生成 CSR,填写正确域名后重新提交申请。
申请 OV 证书时,CSR 里的 Organization 必须和企业名称一样吗?
按 CA 的申请要求填写真实准确的组织信息,但 CSR 里的 Organization 字段不能替代 CA 的组织身份验证。最终证书的组织信息以 CA 审核和签发结果为准。
CSR 是申请 SSL/TLS 证书时提交给 CA 的标准化请求数据,采用 PKCS#10 格式,包含公钥、Subject 信息和可选扩展请求,由对应私钥签名。它不包含私钥,也不能直接当证书用;最终证书的域名与组织信息由 CA 根据证书类型、验证结果和签发政策确定。现代证书申请中 SAN 是域名匹配的重要字段,CN 已不是唯一域名标识。生成后检查域名、算法和私钥保管,是提交前的基本步骤。



京公网安备11010502031690号
网站经营企业工商营业执照
















