CSR.plus API 參考
透過單一開放 REST API 自動化完整的 SSL/TLS 憑證生命週期——CSR 產生、解碼、A–F 評級、憑證透明度、CAA、撤銷與 TLS 追蹤。免費、無需認證、無需 API 金鑰。
線上試玩 API概述
CSR.plus API 是一組驅動我們網頁工具的唯讀與產生端點。每個端點都回傳 JSON、支援瀏覽器用戶端的 CORS,並按 IP 位址限流。金鑰與 CSR 僅在記憶體中產生,絕不儲存。
基礎 URL 與認證
https://csr.plus所有端點均透過 HTTPS 提供。無需認證——API 在設計上就是開放且無需認證的。沒有 API 金鑰、令牌或計費。請求僅按 IP 位址識別以用於限流。
所有回應都包含 CORS 標頭(Access-Control-Allow-Origin: *),因此你可以直接從瀏覽器和用戶端指令碼呼叫 API。
速率限制
| 端點 | 限制 | 窗口 |
|---|---|---|
| /api/generate | 10 次請求 | 每分鐘每 IP |
| /api/ssl-check, /api/ct, /api/caa | 30 次請求 | 每分鐘每 IP |
| /api/revocation, /api/ssl-tracer | 20 次請求 | 每分鐘每 IP |
| /api/decode, /api/openssl-trace | 不限制 | — |
超過限制會回傳 HTTP 429,並附帶 Retry-After 標頭,指示需要等待的秒數。
/api/generate產生憑證簽章請求與私鑰。速率限制:每分鐘每 IP 10 次請求。
請求主體
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
| common_name | string | 是 | 主網域(例如 example.com) |
| sans | array | 否 | 附加的主題別名,例如 ["www.example.com"] |
| organization | string | 否 | 組織名稱(O) |
| org_unit | string | 否 | 組織單位(OU) |
| country | string | 否 | 兩位國家代碼(C),例如 "US" |
| state | string | 否 | 州或省(ST) |
| locality | string | 否 | 城市 / 地區(L) |
| string | 否 | 聯絡電子郵件 | |
| key_type | string | 否 | "rsa"(預設)或 "ecdsa" |
| key_size | string|int | 否 | RSA:2048(預設)/ 3072 / 4096 · ECDSA:"P-256"(預設)/ "P-384" |
| passphrase | string | 否 | 將私鑰加密為加密的 PKCS#8 PEM(最多 200 字元) |
回應欄位
| 欄位 | 說明 |
|---|---|
| csr | PEM 格式的憑證簽章請求(PKCS#10,SHA-256 簽章) |
| private_key | PEM 格式的私鑰(PKCS#8;提供 passphrase 時為加密的 PKCS#8) |
| algorithm | 使用的演算法,例如 "RSA-2048" 或 "ECDSA-P-256" |
| created_at | 產生的 ISO 8601 時間戳 |
curl -X POST https://csr.plus/api/generate \
-H "Content-Type: application/json" \
-d '{
"common_name": "example.com",
"sans": ["www.example.com", "api.example.com"],
"organization": "Example Inc",
"country": "US",
"key_type": "rsa",
"key_size": 2048
}'{
"csr": "-----BEGIN CERTIFICATE REQUEST-----\nMIICzDCCAbQCAQAwgYwxCzAJBgNVBAYTAVVT...\n-----END CERTIFICATE REQUEST-----",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASC...\n-----END PRIVATE KEY-----",
"algorithm": "RSA-2048",
"created_at": "2026-08-14T10:30:00.000Z"
}openssl req -verify -noout -in example.com.csr
openssl req -in example.com.csr -text -noout | head -20/api/decode解析任意 PKCS#10 CSR,回傳其主體、主體別名、公開金鑰、簽章驗證與延伸。
請求主體
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
| csr | string | 是 | PEM 格式的 CSR(-----BEGIN CERTIFICATE REQUEST-----) |
curl -X POST https://csr.plus/api/decode \
-H "Content-Type: application/json" \
-d '{"csr": "-----BEGIN CERTIFICATE REQUEST-----\n..."}'{
"success": true,
"subject": {
"commonName": "example.com",
"organization": "Example Inc",
"organizationalUnit": null,
"country": "US",
"state": "California",
"locality": "San Francisco",
"email": null
},
"publicKey": { "type": "RSA", "size": 2048 },
"signature": { "algorithm": "sha256WithRSAEncryption", "verified": true },
"sanList": ["example.com", "www.example.com", "api.example.com"],
"extensions": [],
"size": 640,
"version": 0,
"timestamp": "2026-08-14T10:30:00.000Z"
}注意:dcvInfo 包含網域控制驗證提示(HTTP token 檔案與 CNAME 記錄),在完成 CA 驗證步驟時很有用。
/api/ssl-check?domain={domain}完整的 SSL/TLS 檢測,採用 SSL Labs 風格 A–F 評級:憑證有效性、主機名稱比對、鏈信任、TLS 版本探測與 HSTS 檢查。
查詢參數
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
| domain | string | 是 | 要檢查的主機名稱(假定連接埠 443) |
curl "https://csr.plus/api/ssl-check?domain=example.com"{
"success": true,
"domain": "example.com",
"grade": {
"letter": "A+",
"score": 100,
"label": "Excellent configuration with HSTS",
"checks": [
{ "name": "Hostname match", "status": "pass", "detail": "Certificate covers the requested hostname" },
{ "name": "TLS 1.3", "status": "pass", "detail": "TLS 1.3 is supported" }
]
},
"cert": {
"subject": "CN=example.com",
"issuer": "CN=R10,O=Let's Encrypt,C=US",
"validFrom": "2026-05-14T00:00:00.000Z",
"validTo": "2026-08-12T00:00:00.000Z",
"daysRemaining": 30,
"san": ["example.com", "www.example.com"]
},
"tls": { "tls13": true, "tls12": true, "tls11": false, "tls10": false, "protocol": "TLSv1.3" },
"hsts": { "present": true, "maxAge": 31536000, "includeSubDomains": true, "preload": false }
}/api/ct?domain={domain}搜尋公開憑證透明度日誌中曾為某網域簽發的所有憑證。當 crt.sh 不可用時回退到 Cert Spotter。
查詢參數
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
| domain | string | 是 | 要在 CT 日誌中搜尋的網域 |
curl "https://csr.plus/api/ct?domain=example.com"{
"success": true,
"count": 12,
"source": "crt.sh",
"certs": [
{
"id": 123456,
"logged_at": "2026-08-01T12:00:00.000Z",
"not_before": "2026-07-15T00:00:00.000Z",
"not_after": "2026-10-13T00:00:00.000Z",
"common_name": "example.com",
"name_value": "example.com\nwww.example.com"
}
]
}回應包含 source(crt.sh 或 certspotter),以便你了解資料來自哪個提供者。
/api/caa?domain={domain}回傳網域的 DNS CAA 記錄以及 A、AAAA、NS 和 MX 記錄,顯示哪些憑證頒發機構被授權簽發憑證。
查詢參數
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
| domain | string | 是 | 要查詢的網域 |
curl "https://csr.plus/api/caa?domain=example.com"{
"success": true,
"domain": "example.com",
"caa": [
{ "flags": 0, "tag": "issue", "value": "letsencrypt.org" },
{ "flags": 0, "tag": "iodef", "value": "mailto:[email protected]" }
],
"a": ["93.184.216.34"],
"aaaa": ["2606:2800:220:1:248:1893:25c8:1946"],
"ns": ["a.iana-servers.net"],
"mx": [],
"caaError": ""
}/api/revocation?domain={domain}取得網域目前提供的憑證,並報告其 CRL 分發點與 OCSP 回應器端點。
查詢參數
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
| domain | string | 是 | 要檢查其服務憑證的網域 |
curl "https://csr.plus/api/revocation?domain=example.com"{
"success": true,
"domain": "example.com",
"serial": "03F2A1B3C4D5E6F7",
"crlUrls": ["http://crl.letsencrypt.org/r3.crl"],
"ocspUrls": ["http://r3.o.lencr.org"],
"status": "good"
}/api/ssl-tracer?domain={domain}&port={port}對任意主機與連接埠執行真實的 TLS 握手,記錄 DNS 解析、TCP 連通性、協商的 TLS 版本與密碼套件,以及完整的憑證鏈。
查詢參數
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
| domain | string | 是 | 要連線的主機名稱 |
| port | int | 否 | TCP 連接埠(預設 443) |
curl "https://csr.plus/api/ssl-tracer?domain=example.com&port=443"{
"success": true,
"host": "example.com",
"port": 443,
"dns": { "ips": ["93.184.216.34"], "ms": 12 },
"tcp": { "ok": true, "ms": 38 },
"tls": { "version": "TLSv1.3", "cipher": "TLS_AES_128_GCM_SHA256", "weak": false },
"certs": [
{
"subject": { "CN": "example.com" },
"issuer": { "CN": "R10", "O": "Let's Encrypt", "C": "US" },
"serialNumber": "03F2A1B3C4D5E6F7",
"notBefore": "2026-05-14T00:00:00.000Z",
"notAfter": "2026-08-12T00:00:00.000Z",
"daysRemaining": 30,
"expired": false,
"isCA": false,
"isSelfSigned": false,
"keyType": "RSA",
"keySize": 2048,
"sha256": "E8:2F:0A:..."
}
],
"chainComplete": true,
"chainNote": "Chain resolves to a trusted root",
"errors": []
}/api/openssl-trace?domain={domain}對網域執行一次原始的 openssl s_client 握手,並回傳完整的詳細輸出——適合除錯憑證鏈與協定問題。
查詢參數
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
| domain | string | 是 | 要追蹤的網域(假定連接埠 443) |
curl "https://csr.plus/api/openssl-trace?domain=example.com"{
"success": true,
"output": "CONNECTED(00000005)\ndepth=2 C=US, O=Internet Security Research Group...\nverify return:1\n..."
}錯誤碼
錯誤以 JSON 回傳,包含 error 訊息,在適用時還包含用於程式化處理的 errorId。
| 狀態碼 | errorId | 含義 |
|---|---|---|
| 400 | invalid_json | 請求主體不是有效的 JSON |
| 400 | invalid_common_name | common_name 缺失或超過 253 個字元 |
| 400 | invalid_key_type | key_type 必須是 "rsa" 或 "ecdsa" |
| 400 | invalid_key_size | RSA 大小必須為 2048/3072/4096;ECDSA 曲線必須為 "P-256"/"P-384" |
| 400 | invalid_passphrase | passphrase 必須是非空字串(最多 200 字元) |
| 400 | invalid_json_format | 請求主體或欄位格式錯誤 |
| 405 | method_not_allowed | /api/generate 僅接受 POST |
| 413 | payload_too_large | 請求主體過大(限制 10 KB) |
| 429 | rate_limit_exceeded | 超出速率限制——請在 Retry-After 標頭指定時間後重試 |
| 500 | generation_failed | 金鑰/CSR 產生期間發生內部錯誤 |
最佳實務
- 對於生產環境,請使用 OpenSSL 或 node-forge 在本機產生私鑰。該 API 面向開發、測試與輕量自動化。
- 當金鑰需要在系統間儲存或傳輸時,請設定 passphrase。
- 除非合規要求更強金鑰,否則使用 RSA 2048 或 ECDSA P-256。
- 遵守 Retry-After 標頭,不要在 429 後持續請求。
- 在呼叫唯讀端點前,先在用戶端驗證 domain 參數(最多 253 字元,字母數字、點與連字號)。
- 切勿記錄 API 回應中的 private_key 欄位。
更多範例
import requests
r = requests.post(
"https://csr.plus/api/generate",
json={"common_name": "example.com", "sans": ["www.example.com"]},
)
r.raise_for_status()
data = r.json()
open("example.com.csr", "w").write(data["csr"])
open("example.com.key", "w").write(data["private_key"])const res = await fetch("https://csr.plus/api/generate", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ common_name: "example.com", key_type: "ecdsa", key_size: "P-256" }),
});
const { csr, private_key } = await res.json();
console.log(csr);線上試玩 API
選擇一個端點,填入參數,即可對正式 API 發起真實請求。
常見問題
API 的速率限制是多少?
CSR 產生允許每 IP 每分鐘 10 次請求。SSL 檢測、CT 與 CAA 允許每分鐘 30 次;撤銷與 TLS 追蹤器允許每分鐘 20 次。超過限制會回傳帶 Retry-After 標頭的 HTTP 429。
支援哪些金鑰類型?
RSA 2048/3072/4096 與 ECDSA P-256/P-384。在請求主體中傳入 key_type 與 key_size 參數。
可以加密產生的私鑰嗎?
可以。在請求中新增 passphrase 欄位,私鑰將作為加密的 PKCS#8 PEM 金鑰回傳。
API 會儲存我的私鑰嗎?
不會。金鑰與 CSR 在記憶體中產生,從不持久化、記錄或寫入磁碟。請將該 API 用於開發與測試。
哪些 CA 接受此 API 產生的 CSR?
該 API 產生帶有 SHA-256 簽章的標準 PKCS#10 CSR,所有主流憑證頒發機構都接受,包括 Let’s Encrypt、DigiCert、Sectigo 與 Google Trust Services。