首页/安全/加密与证书速查/openssl req 生成 CSR 与自签证书

openssl req 生成 CSR 与自签证书

req 一个命令覆盖两类任务:生成 CSR(-new)与直接生成自签证书(-x509);配合 -addext 写入 SAN 等扩展,是证书申请与测试的高频入口。

加密与证书速查安全更新于 2026-10-13

openssl req 能做什么

req 命令覆盖两类任务:一是生成证书签名请求(-new),二是直接生成自签证书(-x509)。它也是填写主体信息与扩展的入口:用 -subj 便于脚本化填写,用 -addext 写入 SAN 等扩展。日常使用中,它常与 x509 命令配合,一个负责申请、一个负责查看与签发。

基本信息

生成 CSRopenssl 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 审核阶段被打回重做。

易错点

  • 漏写 -addext 的 SAN:证书签发后无法通过域名校验,需要重新走一遍申请流程
  • 生成后不回读 CSR:交互输入的错误在提交后才暴露,浪费一轮签发周期
  • 用自签证书上生产:不被客户端信任,只适合测试环境
  • 私钥未设密码且随意存放:权限过宽或写入仓库会造成泄漏,应使用 600 权限或密钥管理服务
  • 在 CSR 里塞入与证照不一致的组织信息:CA 审核不通过,需要重新生成并提交

数据来源与参考

  • OpenSSL 官方文档(req)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌