所有 SSL 文章 SSL 与证书

什么是 CSR(证书签名请求)?

CSR(Certificate Signing Request,证书签名请求)是你发送给证书颁发机构(CA)以申请 SSL 证书的编码数据块。它包含你的公钥和域名信息。CA 使用它来创建你的证书。

CSR 内包含什么

字段示例必需?
Common Name (CN)example.com
公钥你的 RSA 或 ECDSA 公钥
密钥算法ECDSA P-256 或 RSA 2048
组织Your Company LLCDV 可选
国家USDV 可选
SANwww.example.comapi.example.com多域名时需要

对于 DV 证书(如 Let’s Encrypt),只有域名和公钥重要。组织字段会被忽略。

CSR 生成流程

  1. 生成密钥对 —— 一个私钥和一个公钥
  2. 构建 CSR —— 将公钥 + 域名信息编码为标准格式(PKCS#10)
  3. 签名 CSR —— 用私钥签名(证明你持有匹配的私钥)
  4. 发送给 CA —— CA 验证你的域名所有权,然后使用 CSR 创建你的证书

私钥永远不离开你的系统。CSR 只包含公钥。

GetHTTPS 自动处理 CSR

使用传统工具时,你需要手动用 OpenSSL 生成 CSR:

# The manual way (not needed with GetHTTPS)
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
  -keyout privkey.pem -out csr.pem -nodes \
  -subj "/CN=example.com"

使用 GetHTTPS 时,你完全不需要接触 CSR。工具会:

  1. 在浏览器中生成密钥对(Web Crypto API)
  2. 从你输入的域名自动构建 CSR
  3. 作为 ACME 流程的一部分发送给 Let’s Encrypt
  4. 给你签名后的证书供下载

CSR 是内部步骤——你只需输入域名即可获得证书。

手动生成 CSR(需要时)

如果你需要独立的 CSR(用于商业 CA,或需要上传 CSR 的平台),方法如下:

ECDSA P-256(推荐)

openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
  -keyout privkey.pem -out csr.pem -nodes \
  -subj "/CN=example.com"

RSA 2048

openssl req -new -newkey rsa:2048 \
  -keyout privkey.pem -out csr.pem -nodes \
  -subj "/CN=example.com"

多域名(SAN)

openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
  -keyout privkey.pem -out csr.pem -nodes \
  -subj "/CN=example.com" \
  -addext "subjectAltName=DNS:example.com,DNS:www.example.com"

验证 CSR

openssl req -in csr.pem -noout -text

这会显示嵌入 CSR 中的域名、密钥算法和密钥大小。

CSR 在 ACME 协议中

ACME 协议(Let’s Encrypt 使用的)中,CSR 在完成步骤发送——在域名验证通过之后。CA 使用 CSR 中的公钥构建你的证书。CSR 格式为 PKCS#10,在 ACME JSON 消息中编码为 base64url。

使用 GetHTTPS 时,整个过程在 JavaScript 中通过 Web Crypto API 和 pkijs 库完成。你永远看不到原始 CSR 字节。

常见问题

我需要保留 CSR 文件吗?

不需要。CSR 仅在证书请求期间使用。CA 签发证书后,CSR 就没有用处了。保留你的私钥证书——CSR 可以丢弃。

续签时能复用 CSR 吗?

技术上可以,但最好每次续签都生成新的密钥对和 CSR。这遵循密钥轮换原则,限制了密钥泄露时的暴露。

CSR 和证书有什么区别?

CSR 是请求——它包含你的公钥并请求 CA 签名。证书是结果——它是 CA 签名的声明,表明你的公钥属于你的域名。CSR 是输入;证书是输出。

能为通配符域名生成 CSR 吗?

可以。使用 *.example.com 作为 Common Name:

openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
  -keyout privkey.pem -out csr.pem -nodes \
  -subj "/CN=*.example.com"

使用 GetHTTPS 时不需要手动生成 CSR——输入 *.example.com 作为域名,GetHTTPS 自动处理 CSR。

CSR 中的”密钥用途”是什么意思?

密钥用途扩展指定证书可以用于什么——TLS 证书通常是”数字签名”和”密钥加密”。GetHTTPS 和大多数 ACME 客户端默认正确设置这些。只有当你为有特定要求的商业 CA 手动生成 CSR 时才需要关心密钥用途。

相关文章

SSL 与证书 2026-05-07
ECC 与 RSA 证书:该如何选择?
对比 ECC(ECDSA P-256)和 RSA(2048/4096 位)证书。ECC 密钥更小、更快。了解为什么 GetHTTPS 默认使用 ECC,以及何时 RSA 仍有意义。
快速开始 2026-05-08
如何获取免费 SSL 证书(分步指南)
5 分钟从 Let's Encrypt 获取免费 SSL 证书 — 无需安装软件、无需注册账号。涵盖 4 种方法、两种验证方式、6 个平台的安装教程和故障排除。
SSL 与证书 2026-05-07
SSL/TLS 如何工作:TLS 握手详解
TLS 握手的可视化解析——浏览器和服务器如何在毫秒内建立加密连接。涵盖 TLS 1.2、TLS 1.3、会话恢复和前向保密。
在浏览器中获取免费 SSL 证书
无需安装,无需账号。私钥始终留在你的设备上。
获取证书