このページでは、カスタム証明書に対する Cloudflare の要件と、ダッシュボードまたは API で証明書をアップロード・更新する手順を説明します。
Cloudflare はカスタム証明書を受け付ける前に解析し、要件リストに照らして妥当性を確認します。
要件の一覧
アップロードするカスタム証明書は、次の条件をすべて満たす必要があります。
- PEM 形式(PEM、PKCS#7、または PKCS#12)でエンコードされていること。変換例は Converting Using OpenSSL ↗ を参照してください。
- 鍵ファイルのパスワード が付いていないこと。
- アップロード時点から 14 日以内に期限切れにならないこと。
- アップロード先ゾーン内のホスト名と一致する subject alternative name(SAN)が 1 つ以上あること。
- 秘密鍵の長さが下限以上であること。現在は RSA で 2048 ビット、ECDSA で 225 ビットです。
- 主要なブラウザーから公開信頼されていること。ただし バンドル方式 に
User Definedを指定した証明書には適用されません。 - 次のいずれかの証明書種別であること:
- Unified Communications Certificates(UCC)
- Extended Validation(EV)
- Domain Validated(DV)
- Organization Validated(OV)
ダッシュボードでカスタム SSL 証明書をアップロードする手順は次のとおりです。
-
Cloudflare ダッシュボードで Edge Certificates ページを開きます。
Edge Certificates を開く ↗ -
Edge Certificates で Upload Custom SSL Certificate を選択します。
-
該当する値を SSL Certificate と Private key のテキストエリアにコピー&ペーストします(または Paste from file を選択します)。
-
適切な Bundle Method を選びます。
-
Private Key Restriction の値を選びます。
-
Legacy Client Support の値を選びます。これは Server Name Indication(SNI) の対応を指定します。
-
Modern (recommended): SNI のみ
-
Legacy: non-SNI をサポート
-
-
Upload Custom Certificate を選択します。
The key you provided does not match the certificateというエラーが出た場合は、秘密鍵が証明書と一致するよう認証局に確認してください。 -
(任意)CAA DNS レコードを追加 します。
次の呼び出しは、app.example.com で使う証明書をアップロードします。Cloudflare は、ブラウザー互換性を最大化するよう最適化した証明書チェーンと証明書を自動でバンドルします。
- ファイルを更新し、ペイロードを組み立てます
cat app_example_com.pem-----BEGIN CERTIFICATE-----
MIIFJDCCBAygAwIBAgIQD0ifmj/Yi5NP/2gdUySbfzANBgkqhkiG9w0BAQsFADBN
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E
...
SzSHfXp5lnu/3V08I72q1QNzOCgY1XeL4GKVcj4or6cT6tX6oJH7ePPmfrBfqI/O
OeH8gMJ+FuwtXYEPa4hBf38M5eU5xWG7
-----END CERTIFICATE-----MYCERT="$(cat app_example_com.pem|perl -pe 's/\r?\n/\\n/'|sed -e 's/..$//')"
MYKEY="$(cat app_example_com.key|perl -pe 's/\r?\n/\\n/'|sed -e's/..$//')"証明書とキーを環境変数へ保存したら(改行はエスケープします)、ペイロードを組み立てます。
request_body=$(< <(cat <<EOF
{
"certificate": "$MYCERT",
"private_key": "$MYKEY",
"bundle_method": "ubiquitous"
}
EOF
))任意で、秘密鍵を物理的に復号できる場所を制限する 地理的制限 ↗ を追加できます。
request_body=$(< <(cat <<EOF
{
"certificate": "$MYCERT",
"private_key": "$MYKEY",
"bundle_method": "ubiquitous",
"geo_restrictions": {"label": "us"}'
}
EOF
))TLS ハンドシェイクに SNI を含めないレガシークライアント向けのサポートも有効にできます。
request_body=$(< <(cat <<EOF
{
"certificate": "$MYCERT",
"private_key": "$MYKEY",
"bundle_method": "ubiquitous",
"geo_restrictions": {"label": "us"}',
"type":"sni_custom"
}
EOF
))Cloudflare は sni_custom を推奨します。特定のクライアントが non-SNI を必要とする場合は legacy_custom を使います。Cloudflare API は、Custom SSL 証明書をデフォルトで Legacy として扱います。
- 証明書と鍵をアップロードします
証明書と鍵のアップロードには POST エンドポイントを使います。
curl https://api.cloudflare.com/client/v4/zones/{zone_id}/custom_certificates \
--header "X-Auth-Email: <EMAIL>" \
--header "X-Auth-Key: <API_KEY>" \
--header "Content-Type: application/json" \
--data "$request_body"- (任意)CAA レコードを追加します。
Certificate Authority Authorization(CAA)DNS レコードは、ドメインの証明書を発行できる認証局(CA)を指定します。このレコードにより、不正な証明書発行の可能性が下がり、組織全体での標準化が進みます。
手順は CAA レコードを作成する を参照してください。
期限が近いカスタム証明書を更新する場合、または鍵材料を差し替えて証明書を置き換える場合は、次の手順に従います。これが推奨する更新方法です。追加の証明書クォータ枠を消費せず、ダウンタイムも避けられます。
既存のカスタム証明書を更新する前に、フォールバックとして Universal または Advanced の証明書を有効にしておくことを検討してください。ゾーン内のホスト名とエッジ証明書のステータスは、Edge Certificates ↗ ページで確認できます。
Enterprise プランでカスタム(modern)証明書を更新する場合は、Staging environment(Beta) へのアクセス申請も検討してください。
この手順でカスタム証明書を置き換えてもダウンタイムは発生しません。既存接続は切断されず、新しい接続は新しい証明書を使います。古い証明書は、新しい証明書がアップロードされアクティブになった時点で実際に削除されます。
ダッシュボードで証明書を更新する手順は次のとおりです。
-
Cloudflare ダッシュボードで Edge Certificates ページを開きます。
Edge Certificates を開く ↗ -
Edge Certificates で対象のカスタム証明書を探し、選択して展開します。
-
レンチボタンを選び、Replace SSL certificate and key を選びます。
-
新しい証明書のアップロード と同じ手順を進めます。
API で証明書を更新するには、PATCH コマンドを送信します。
-
Cloudflare ダッシュボードで Edge Certificates ページを開きます。
Edge Certificates を開く ↗ -
Edge Certificates で対象のカスタム証明書を探し、選択して展開します。
-
バツボタンを選択します。
-
Confirm を選択して証明書を削除します。