Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

証明書署名リクエスト(CSR)

最終更新 Markdown で表示Agent セットアップ

証明書署名リクエスト(CSR)を生成すると、希望する認証局(CA)からカスタム証明書を取得でき、秘密鍵は Cloudflare 上で管理したままにできます。CSR に紐づく秘密鍵は Cloudflare が生成し、Cloudflare のネットワーク外には出ません。

CSR には、ドメインに関する情報として、組織名と住所、コモンネーム(ドメイン名)、Subject Alternative Names(SANs)が含まれます。

CSR を生成したら、顧客に渡します。顧客は希望する CA に提出して証明書を取得し、返します。証明書を受け取ったら Cloudflare にアップロードし、CSR 作成時に渡された一意の CSR ID を指定します。


秘密鍵と CSR を生成する

1. CSR のペイロードを作る

organizational_unitkey_type 以外のフィールドは必須です。key_type を指定しない場合、デフォルトの rsa2048(RSA 2048 ビット)が使われます。もう 1 つの選択肢は p256v1(NIST P-256)です。

コモンネームは 64 文字まで、Subject Alternative Names(SAN)は 255 文字までです(RFC 5280)。SAN は少なくとも 1 つ指定し、SAN の一覧にはコモンネームを含めてください。

request_body=$(< <(cat <<EOF
{
  "country": "US",
  "state": "MA",
  "locality": "Boston",
  "organization": "City of Boston",
  "organizational_unit": "Championship Parade Detail",
  "common_name": "app.example.com",
  "sans": [
    "app.example.com",
    "www.example.com",
    "blog.example.com",
    "example.com"
  ],
  "key_type": "p256v1"
}
EOF
))

2. CSR を生成する

次に、顧客に渡す CSR を生成します。

curl https://api.cloudflare.com/client/v4/zones/{zone_id}/custom_csrs \
--header "X-Auth-Email: <EMAIL>" \
--header "X-Auth-Key: <API_KEY>" \
--header "Content-Type: application/json" \
--data "$request_body"

# Response:
{
  "result": {
    "id": "7b163417-1d2b-4c84-a38a-2fb7a0cd7752",
    "country": "US",
    "state": "MA",
    "locality": "Boston",
    "organization": "City of Boston",
    "organizational_unit": "Championship Parade Detail",
    "common_name": "app.example.com",
    "sans": [
      "app.example.com",
      "www.example.com",
      "blog.example.com",
      "example.com",
    ],
    "key_type": "p256v1",
    "csr": "-----BEGIN CERTIFICATE REQUEST-----\nMIIBSzCB8gIBADBiMQswaQYDVQQGEwJVUzELMAkGA1UECBMCTUExDzANBgNVBAcT\nBkJvc3RvbjEaMBgGA1UEChMRQ2l0eSBvZiBDaGFtcGlvbnMxGTAXBgNVBAMTEGNz\nci1wcm9kLnRscy5mdW4wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAaTKf70NYlwr\n20P6P8xj8/4mTN5q28dbZR/gM3u4m/RPs24+PxAfMZCNvkVKAPVWYfUAadZI4Ha/\ndxLh5Q6X5bhIoC4wLAYJKoZIhvcNAQkOMR8wHTAbBqNVHREEFDASghBjc3ItcHJv\nZC50bHMuZnVuMAoGCCqGSM49BAMCA0gAMEUCIQDgtFUZav466SbT2FGBsIBlahDI\nVkg4y+u+V/K5DlY1+gIgQ9xLfUSKnSnJYbM9TwWr4Z964+lBtB9af4O5pp7/PSA=\n-----END CERTIFICATE REQUEST-----\n"
  },
  "success": true

顧客に渡す前に、\n を実際の改行に置き換えます。直前の呼び出しの出力を jq と perl にパイプするとできます。例:

curl https://api.cloudflare.com/client/v4/zones/{zone_id}/custom_csrs \
--header "X-Auth-Email: <EMAIL>" \
--header "X-Auth-Key: <API_KEY>" \
--header "Content-Type: application/json" \
--data "$request_body" | jq .result.csr | perl -npe s'/\\n/\n/g; s/"//g' > csr.txt

3. 顧客が証明書を取得する

顧客は渡された CSR を使い、CA とやり取りして署名済みの公開信頼証明書を取得します。

4. 証明書をアップロードする

証明書をアップロードし、CSR 生成時に渡された ID を指定します。

上記のカスタム証明書アップロード例と同様に、証明書内の改行をリテラルの \n に置き換えます。そのあとリクエスト本文を作り、前の手順で返された ID を指定します。

Cloudflare が受け付けるのは公開信頼証明書だけです。自己署名証明書をアップロードしようとすると拒否されます。

$ MYCERT="$(cat app_example_com.pem|perl -pe 's/\r?\n/\\n/'|sed -e 's/..$//')"

$ request_body=$(< <(cat <<EOF
{
  "hostname": "app.example.com",
  "ssl": {
    "custom_csr_id": "7b163417-1d2b-4c84-a38a-2fb7a0cd7752",
    "custom_certificate": "$MYCERT"
  }
}
EOF
))

リクエスト本文ができたら、渡したカスタム証明書で カスタムホスト名を作成 します。同じ証明書を複数のホスト名で使う場合は、hostname フィールドを差し替えて API を複数回呼び出します。


その他の操作

すべての CSR を一覧する

これまでに生成したカスタム CSR の(ページ分割された)一覧は、https://api.cloudflare.com/client/v4/zones/{zone_id}/custom_csrs への GET リクエストで取得できます。

CSR を削除する

基盤の秘密鍵ごと CSR を 1 件以上削除するには、https://api.cloudflare.com/client/v4/zones/{zone_id}/custom_csrs/{csr_id}DELETE リクエストを送ります。

その CSR 用に生成された秘密鍵を使うカスタム証明書がなければ、CSR を削除できます。秘密鍵がまだ使われている CSR を削除しようとすると、エラーになります。

役に立ちましたか?