CSR(Certificate Signing Request,證書籤名請求)是你傳送給憑證授權機構(CA)以申請 SSL 證書的編碼資料塊。它包含你的公鑰和域名資訊。CA 使用它來建立你的證書。
CSR 內包含什麼
| 欄位 | 示例 | 必需? |
|---|---|---|
| Common Name (CN) | example.com | 是 |
| 公鑰 | 你的 RSA 或 ECDSA 公鑰 | 是 |
| 金鑰演算法 | ECDSA P-256 或 RSA 2048 | 是 |
| 組織 | Your Company LLC | DV 可選 |
| 國家 | US | DV 可選 |
| SAN | www.example.com、api.example.com | 多域名時需要 |
對於 DV 證書(如 Let’s Encrypt),只有域名和公鑰重要。組織欄位會被忽略。
CSR 生成流程
- 生成金鑰對 —— 一個私鑰和一個公鑰
- 構建 CSR —— 將公鑰 + 域名資訊編碼為標準格式(PKCS#10)
- 簽名 CSR —— 用私鑰簽名(證明你持有匹配的私鑰)
- 傳送給 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。工具會:
- 在瀏覽器中生成金鑰對(Web Crypto API)
- 從你輸入的域名自動構建 CSR
- 作為 ACME 流程的一部分傳送給 Let’s Encrypt
- 給你簽名後的證書供下載
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 時才需要關心金鑰用途。