CSR 与私钥是干什么的
CSR(证书签名请求)是「公钥 + 主体信息 + 自签名」的申请文件。私钥必须在本机生成并永久留在本机,CSR 里只有公钥与域名列表,CA 用它签出证书,整个流程 CA 拿不到私钥。自签名的作用是证明申请者确实持有对应私钥。OpenSSL 用 openssl req 子命令生成密钥与 CSR,跨 Linux、macOS、Windows 一致。
基本信息
| 适用平台 | OpenSSL 1.1.1 / 3.x |
|---|---|
| 权限要求 | 普通用户;私钥文件建议 chmod 600 |
| 生成方式 | openssl req -new 配 -newkey,或先用 genrsa/ecparam 造密钥 |
| 关键字段 | CN 通用名、SAN 主体备用名(现代校验以 SAN 为准) |
| 提交给 CA | 只提交 .csr 文件,绝不上传 .key |
| 推荐密钥 | ECC prime256v1 或 RSA 2048 及以上 |
典型使用场景
- 首次申请证书:本地生成密钥与 CSR,把 CSR 交给 CA 签发
- 证书续期:沿用原私钥生成新 CSR,避免全站替换密钥
- 多域名与通配符证书:把所有覆盖域名写进 SAN 列表
- 内网服务签发:走同一套流程交给自建 CA 签发
- 密钥轮换:合规要求定期换密钥时生成新密钥对并重新签发
生成与自检
生成与自检
# 一步生成 RSA 私钥与 CSR:-nodes 表示私钥不设口令
openssl req -new -newkey rsa:2048 -nodes -keyout site.key -out site.csr -subj '/CN=example.com'
# 更常见的做法:用配置文件带上 SAN 域名列表
openssl req -new -key site.key -out site.csr -config san.cnf
# ECC 密钥,握手更快、密钥更短
openssl ecparam -genkey -name prime256v1 -out site.key
openssl req -new -key site.key -out site.csr -config san.cnf
# 自检:验证 CSR 签名并查看将要写进证书的字段
openssl req -in site.csr -noout -verify -subject
openssl req -in site.csr -noout -text | grep -A2 'Subject Alternative Name'CSR 关键字段
| 字段 | 含义 | 注意事项 |
|---|---|---|
| CN 通用名 | 证书主体名,传统上填域名 | 现代 CA 以 SAN 为准,CN 已可留空 |
| SAN 主体备用名 | 证书真正覆盖的域名清单 | 浏览器与新版客户端只认这里 |
| C/ST/L/O | 国家、省份、组织等主体信息 | 按 CA 要求填,个人证书可简化 |
| EKU 扩展用途 | 证书可用的场景 | 一般由 CA 签发时写入,CSR 里常不填 |
CSR 中含公钥,公开展示没有风险;但私钥一旦泄露等于身份可被冒用。生成后立即 chmod 600,并确认没有随备份、镜像或代码仓库外流。
通配符 *.example.com 只覆盖一级子域,不覆盖 example.com 本身,也不匹配 a.b.example.com;泛域名与裸域需要同时写进 SAN。