CSR.pluscsr.plus

CSR.plus API リファレンス

単一のオープン REST API で SSL/TLS 証明書ライフサイクル全体を自動化 — CSR 生成、デコード、A–F 評価、証明書透明性、CAA、失効、TLS トレース。無料、認証不要、API キー不要。

API をライブで試す

概要

CSR.plus API は、当サイトの Web ツールを支える読み取り専用と生成のエンドポイント群です。すべてのエンドポイントは JSON を返し、ブラウザクライアント向けに CORS をサポートし、IP アドレスごとにレート制限されます。キーと CSR はメモリ内で生成され、保存されることはありません。

必要なものはすべて揃っています:CSR と秘密鍵の生成、任意の CSR のデコード、A から F までのデプロイ評価、証明書透明性ログの検索、CAA レコードの確認、失効状態の検証、完全な TLS ハンドシェイクのトレース。

ベース URL と認証

Base URL
https://csr.plus

すべてのエンドポイントは HTTPS で提供されます。認証は不要です — API は設計上、オープンで認証なしです。API キー、トークン、課金はありません。リクエストはレート制限のためだけに IP アドレスで識別されます。

すべてのレスポンスに CORS ヘッダー(Access-Control-Allow-Origin: *)が含まれるため、ブラウザやクライアント側スクリプトから直接 API を呼び出せます。

レート制限

エンドポイント制限ウィンドウ
/api/generate10 リクエスト1分あたり IP ごと
/api/ssl-check, /api/ct, /api/caa30 リクエスト1分あたり IP ごと
/api/revocation, /api/ssl-tracer20 リクエスト1分あたり IP ごと
/api/decode, /api/openssl-trace制限なし—

制限を超えると、待機秒数を示す Retry-After ヘッダー付きの HTTP 429 が返されます。

POST/api/generate

証明書署名要求と秘密鍵を生成します。レート制限:1分あたり IP ごとに 10 リクエスト。

リクエストボディ

パラメータ型必須説明
common_namestringはいプライマリドメイン(例:example.com)
sansarrayいいえ追加のサブジェクト代替名(例:["www.example.com"])
organizationstringいいえ組織名(O)
org_unitstringいいえ組織単位(OU)
countrystringいいえ2 文字の国コード(C)(例:"US")
statestringいいえ州または県(ST)
localitystringいいえ市区町村(L)
emailstringいいえ連絡先メールアドレス
key_typestringいいえ"rsa"(デフォルト)または "ecdsa"
key_sizestring|intいいえRSA:2048(デフォルト)/ 3072 / 4096 · ECDSA:"P-256"(デフォルト)/ "P-384"
passphrasestringいいえ秘密鍵を暗号化された PKCS#8 PEM として暗号化(最大 200 文字)

レスポンスフィールド

フィールド説明
csrPEM 形式の証明書署名要求(PKCS#10、SHA-256 署名)
private_keyPEM 形式の秘密鍵(PKCS#8;passphrase 指定時は暗号化 PKCS#8)
algorithm使用されたアルゴリズム(例:"RSA-2048" または "ECDSA-P-256")
created_at生成時刻の ISO 8601 タイムスタンプ
リクエスト例(cURL)
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 で結果を検証
openssl req -verify -noout -in example.com.csr
openssl req -in example.com.csr -text -noout | head -20
POST/api/decode

任意の PKCS#10 CSR を解析し、サブジェクト、サブジェクト代替名、公開鍵、署名検証、拡張を返します。

リクエストボディ

パラメータ型必須説明
csrstringはいPEM 形式の CSR(-----BEGIN CERTIFICATE REQUEST-----)
リクエスト例(cURL)
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 検証手順の完了に役立ちます。

GET/api/ssl-check?domain={domain}

SSL Labs スタイルの A–F 評価付きフル SSL/TLS チェック:証明書の有効性、ホスト名一致、チェーン信頼、TLS バージョンプローブ、HSTS 検査。

クエリパラメータ

パラメータ型必須説明
domainstringはいチェックするホスト名(ポート 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 }
}
GET/api/ct?domain={domain}

ドメインに発行されたすべての証明書を公開証明書透明性ログで検索します。crt.sh が利用できない場合は Cert Spotter にフォールバックします。

クエリパラメータ

パラメータ型必須説明
domainstringはい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)が含まれ、データの提供元を確認できます。

GET/api/caa?domain={domain}

ドメインの DNS CAA レコードと、A、AAAA、NS、MX レコードを返し、証明書の発行を許可された認証局を示します。

クエリパラメータ

パラメータ型必須説明
domainstringはい照会するドメイン
リクエスト例
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": ""
}
GET/api/revocation?domain={domain}

ドメインが現在提供している証明書を取得し、CRL 配布ポイントと OCSP レスポンダエンドポイントを報告します。

クエリパラメータ

パラメータ型必須説明
domainstringはい提供中の証明書を検査するドメイン
リクエスト例
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"
}
GET/api/ssl-tracer?domain={domain}&port={port}

任意のホストとポートに対して実際の TLS ハンドシェイクを実行し、DNS 解決、TCP 接続、ネゴシエートされた TLS バージョンと暗号、完全な証明書チェーンを記録します。

クエリパラメータ

パラメータ型必須説明
domainstringはい接続するホスト名
portintいいえ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": []
}
GET/api/openssl-trace?domain={domain}

ドメインに対して生の openssl s_client ハンドシェイクを実行し、完全な詳細出力を返します — 証明書チェーンとプロトコルの問題のデバッグに便利です。

クエリパラメータ

パラメータ型必須説明
domainstringはいトレースするドメイン(ポート 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意味
400invalid_jsonリクエストボディが有効な JSON ではありません
400invalid_common_namecommon_name が欠落しているか、253 文字を超えています
400invalid_key_typekey_type は "rsa" または "ecdsa" である必要があります
400invalid_key_sizeRSA サイズは 2048/3072/4096、ECDSA 曲線は "P-256"/"P-384" である必要があります
400invalid_passphrasepassphrase は空でない文字列(最大 200 文字)である必要があります
400invalid_json_formatリクエストボディまたはフィールドが不正です
405method_not_allowed/api/generate は POST のみ受け付けます
413payload_too_largeリクエストボディが大きすぎます(上限 10 KB)
429rate_limit_exceededレート制限を超えました — Retry-After ヘッダーの後に再試行してください
500generation_failedキー/CSR 生成中に内部エラーが発生しました

ベストプラクティス

  • 本番環境では、OpenSSL または node-forge を使用して秘密鍵をローカルで生成してください。API は開発、テスト、軽量自動化向けに設計されています。
  • キーをシステム間で保存または転送する必要がある場合は、passphrase を設定してください。
  • コンプライアンス上、より強いキーが必要でない限り、RSA 2048 または ECDSA P-256 を使用してください。
  • 429 の後も API を連打せず、Retry-After ヘッダーに従ってください。
  • 読み取り専用エンドポイントを呼び出す前に、クライアント側で domain パラメータを検証してください(最大 253 文字、英数字、ドットとハイフン)。
  • API レスポンスの private_key フィールドをログに記録しないでください。

その他の例

Python(requests)
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"])
Node.js(fetch)
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 を含むすべての主要認証局に受け入れられます。