CSR.plus API リファレンス
単一のオープン REST API で SSL/TLS 証明書ライフサイクル全体を自動化 — CSR 生成、デコード、A–F 評価、証明書透明性、CAA、失効、TLS トレース。無料、認証不要、API キー不要。
API をライブで試す概要
CSR.plus API は、当サイトの Web ツールを支える読み取り専用と生成のエンドポイント群です。すべてのエンドポイントは JSON を返し、ブラウザクライアント向けに CORS をサポートし、IP アドレスごとにレート制限されます。キーと CSR はメモリ内で生成され、保存されることはありません。
ベース URL と認証
https://csr.plusすべてのエンドポイントは HTTPS で提供されます。認証は不要です — API は設計上、オープンで認証なしです。API キー、トークン、課金はありません。リクエストはレート制限のためだけに IP アドレスで識別されます。
すべてのレスポンスに CORS ヘッダー(Access-Control-Allow-Origin: *)が含まれるため、ブラウザやクライアント側スクリプトから直接 API を呼び出せます。
レート制限
| エンドポイント | 制限 | ウィンドウ |
|---|---|---|
| /api/generate | 10 リクエスト | 1分あたり IP ごと |
| /api/ssl-check, /api/ct, /api/caa | 30 リクエスト | 1分あたり IP ごと |
| /api/revocation, /api/ssl-tracer | 20 リクエスト | 1分あたり IP ごと |
| /api/decode, /api/openssl-trace | 制限なし | — |
制限を超えると、待機秒数を示す Retry-After ヘッダー付きの HTTP 429 が返されます。
/api/generate証明書署名要求と秘密鍵を生成します。レート制限:1分あたり IP ごとに 10 リクエスト。
リクエストボディ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
| common_name | string | はい | プライマリドメイン(例:example.com) |
| sans | array | いいえ | 追加のサブジェクト代替名(例:["www.example.com"]) |
| organization | string | いいえ | 組織名(O) |
| org_unit | string | いいえ | 組織単位(OU) |
| country | string | いいえ | 2 文字の国コード(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 トークンファイルと CNAME レコード)が含まれ、CA 検証手順の完了に役立ちます。
/api/ssl-check?domain={domain}SSL Labs スタイルの A–F 評価付きフル SSL/TLS チェック:証明書の有効性、ホスト名一致、チェーン信頼、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 を使用してください。
- 429 の後も API を連打せず、Retry-After ヘッダーに従ってください。
- 読み取り専用エンドポイントを呼び出す前に、クライアント側で 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 で生成した CSR を受け入れる CA は?
この API は SHA-256 署名付きの標準 PKCS#10 CSR を生成し、Let’s Encrypt、DigiCert、Sectigo、Google Trust Services を含むすべての主要認証局に受け入れられます。