openssl req 能做什么
req 命令覆盖两类任务:一是生成证书签名请求(-new),二是直接生成自签证书(-x509)。它也是填写主体信息与扩展的入口:用 -subj 便于脚本化填写,用 -addext 写入 SAN 等扩展。日常使用中,它常与 x509 命令配合,一个负责申请、一个负责查看与签发。
基本信息
| 生成 CSR | openssl req -new -key key.pem -out req.csr |
|---|---|
| 写入扩展 | -addext 指定 SAN 等扩展,脚本化场景必用 |
| 生成自签证书 | openssl req -x509 -newkey rsa:2048 -nodes -days 365 |
| 查看校验 | openssl req -in req.csr -noout -text -verify |
| 配置复用 | -config 指定配置文件中的默认字段与扩展模板 |
| 适用场景 | 证书申请、测试证书、批量签发流程 |
典型使用场景
- 向 CA 申请证书:生成 CSR 后提交
- 测试环境自签证书:快速生成可用的本地证书
- 批量签发:脚本化生成多域名 CSR 并集中处理
- 扩展核对:确认提交的 CSR 中 SAN 等扩展符合预期
- 私钥生成:与其他命令配合完成密钥对的创建
生成并检查 CSR
生成并检查 CSR
# 生成私钥(脚本化流程常用 genpkey)
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out example.com.key
# 生成 CSR:-subj 填主体,-addext 写 SAN
openssl req -new -key example.com.key -out example.com.csr \
-subj "/C=CN/O=Example/CN=example.com" \
-addext "subjectAltName=DNS:example.com,DNS:www.example.com"
# 校验 CSR 并确认 SAN 写入成功
openssl req -in example.com.csr -noout -text | grep -A2 'Alternative'
openssl req -in example.com.csr -noout -verify
# 生成自签证书(仅用于测试环境)
openssl req -x509 -newkey rsa:2048 -nodes -days 365 -keyout self.key -out self.crt -subj "/CN=test.local"常用参数
| 参数 | 作用 | 使用提示 |
|---|---|---|
| -new | 生成新的 CSR | 与 -key 配合,指定已生成的私钥 |
| -x509 | 直接输出自签证书 | 需同时指定有效期与密钥来源 |
| -subj | 命令行指定主体 | 适合脚本化,避免交互输入出错 |
| -addext | 添加扩展 | 写 SAN 的关键,遗漏会导致域名不匹配 |
| -config | 指定配置文件 | 手工流程可用模板减少字段遗漏 |
| -nodes | 私钥不加密 | 仅测试便利;生产私钥应设置密码或改用密钥管理 |
漏掉 -addext 导致 SAN 缺失,是生成 CSR 时最常见的错误:现代客户端只看 SAN,签发出来的证书会直接报域名不匹配。生成后务必用 -text 回读一遍,确认域名清单完整。
交互模式下误输字段很常见:建议脚本化使用 -subj 与 -addext,或在 -config 中提供默认值。生成 CSR 前先确认主体信息与组织证照一致,避免 CA 审核阶段被打回重做。