OV/EV 証明書即時発行

API を使用して DV 証明書をオーダーする場合、証明書の発行待ちで時間を使うことが非常によくあります。このワークフローガイドでのステップに従うことで、当社の即時発行機能を活用し、DV 証明書を即時発行および API コールを最大 70% 削減することができます。

Encryption Everywhere DV 証明書を請求するには、これらのステップにしたがって、お使いのアカウント用に AuthKey を構成しなければなりません。この構成がない場合、申請の提出時 auth_key_not_setup エラーが出されます。

概要

即時発行を利用するには、DV 証明書オーダーの提出前に、これらのステップを完了しなければなりません。

  1. CertCentral アカウントの AuthKey を作成します。
  2. DV 証明書オーダーの証明書署名申請 (CSR) を作成します。
  3. タイムスタンプを作成して、申請トークンの有効期間を確定します。
  4. AuthKey と CSR を使用して、申請トークンを作成します。
  5. 作成した申請トークンを、DV 証明書による保護を受けるドメインに追加します。
  6. DV 証明書オーダーを提出する

DV 証明書オーダーの提出時に、これらのステップが完了したら、当社では速やかに、DV 証明書を発行し、応答団体に中に返します。これらのステップのいずれかをスキップした場合、即時発行はできません。

ステップ 1:AuthKey を作成する

はじめに、CertCentral アカウントの AuthKey を作成します。このキーを使用して、申請トークンを作成し、ドメインの利用権を確認します。AuthKey は、[AuthKey を作成する] endpoint.エンドポイントへの POST で、作成できます。

このエンドポイントへの POST が成功すると、200 OK HTTP 応答が返されます。応答団体には、以下の情報の2つのキーピースが含まれます。

  • auth_key_id – 作成した AuthKey の一意 ID
  • auth_key – CertCentral アカウントについて作成した AuthKey

CertCentral アカウントについて存在する AuthKey は1つのみです。お使いのアカウントに AuthKey がすでにある場合、[AuthKey を作成する]エンドポイントは 400 不良申請 HTTP 応答を auth_key_exists_for_account エラーをつけて返します。このエラーが出た場合は、[AuthKey 詳細]エンドポイントを使用して、既存の AuthKey を取得します。

cURL
curl -X POST \
  https://www.digicert.com/services/v2/account/auth-key \
  -H 'Content-Type: application/json' \
  -H 'X-DC-DEVKEY: {{api_key}}'
200 OK
{
  "auth_key_id": "{{auth_key_id}}",
  "auth_key": "{{auth_key}}"
}
400 Bad Request
{
  "errors": [
    {
      "code": "auth_key_exists_for_account",
      "message": "An error occurred while processing your request."
    }
  ]
}

ステップ 2:証明書署名要求(CSR)を作成する

お使いのアカウントに AuthKey ができたら、次のステップとして、証明書オーダーに CSR を作成します。申請トークンの作成には CSR が必要です。CSR が証明書をインストールするサーバー上で生成されているかを確認します。

CSR の作成にサポートが必要ですか?「CSR (証明書署名申請) を作成する」を参照してください。

ステップ 3:タイプスタンプを作成する

タイムスタンプにより、申請トークンの30日有効期間の開始時刻が決まります。タイプスタンプの作成時、生成される有効期間ウインドウが、DV 証明書オーダーの提出時と一致しているかを確認してください。オーダーがを有効期間ウインドウの前または後で提出した場合、即時発行はできません。

タイムスタンプを作成できるのは、未来の時刻です。ただし、DV 証明書はその日付前に提出しないでください。申請トークンがまだ "有効ではない"ため、,ドメイン名の利用権確認に使用できません。

申請トークンの有効期間ウインドウが開始になる時刻の決定後、下記のとおり、タイムスタンプの初期化が必要になります。

generic
yyyyMMddhhmmss

例えば、October 21, 2019 1:30:12 PM20191021133012 になります。

ステップ 4:申請トークンを生成する

申請トークンには、タイムスタンプでデータを確定した30日の有効期間が入っています。申請トークンを生成するとき、その30日のタイムスタンプウインドウが証明書オーダーの提出時と一致しているかを確認してください。

これで AuthKey、CSR、およびタ印譜スタンプがそろったので、ドメイン名の利用権の確認に使用する申請トークンを生成する準備は完了です。この申請トークンにより、証明書オーダーを執行する前に、お持ちのドメインの DNS TXT レコードまたは fileauth.txt ファイルをセットアップすることができます。

申請トークンの生成方法

  1. PEM 形式の CSR にタイムスタンプを事前保留して、ハッシュする秘密を構築します。
  2. AuthKey をキーとして使用して HMAC-SHA256 で、秘密をハッシュします。
  3. 生成された16進数のハッシュを10進法(基数10)ハッシュ値に変換します。
  4. 10進数のハッシュ値を基数36ハッシュ値に変換します。
  5. 基数36ハッシュ値の長さが少なくとも50文字になっているかを確認します。確認しない場合、長さが50文字になるまで、ゼロ (0) で事前保留されます。
  6. タイムスタンプを期す36ハッシュ値で事前保留して、最終申請トークンを構築します。

この疑似コードの例は、上記ステップを使用した申請トークンの生成方法を示しています。

generic
# Declare AuthKey, CSR, and timestamp
auth_key = 'certcentral_account_auth_key'
csr = 'pem_formatted_csr'
timestamp = 'yyyyMMddhhmmss'

# Construct secret to be hashed
secret = timestamp + csr

# Hash secret using HMAC-SHA256 and auth_key
hash = hmac.sha256(secret, auth_key)

# Convert hexadecimal hash to decimal
decimal_hash = convertToBase10(hash)

# Convert decimal_hash to base36
base36_hash = convertToBase36(decimal_hash)

# If base36_hash length is < 50, prepend with zeros
valid_hash = base36_hash.padStart(50, '0')

# Construct final request token
request_token = timestamp + valid_hash

ステップ 5:申請トークンを入れる

DV 証明書即時発行について、証明書をオーダーする前に、以下の場所の1つに申請トークンを入れる必要があります。

  • ドメインの DNS に TXT レコードとして入れる
  • お持ちのウェブサイトの事前決定した場所の fileauth.txt ファイルに入れる

申請トークンを入れたら、DV 証明書オーダーを提出することができます。

DNS TXT

申請トークンを含む DNS TXT レコードを作成することで、DV 証明書オーダーで、ドメイン名の利用権を確認することができます。DNS TXT レコードが作成されたら、DV 証明書を申請する ことができます。

申請トークンに DNS TXT を使用した場合、必ず dcv_method 値を dns-txt-token に設定してください。

  1. DNS プロバイダーのサイトに移動し、新しい TXT レコードを作成します。

  2. TXT 値]フィールドに、申請トークンを貼り付けます。

  3. 安全保護する証明shおオーダーとドメインによって異なりますが、[ホスト]フィールドに以下のいずれかを行ってください。

    • ベースドメイン (例. example.com)
      空白のままにするか @ 記号を入力する (DNS 要件によって異なる)。
    • サブドメイン
      証明書により安全保護するサブドメインを入力する。
    • 認証ドメイン名
      _dnsauth を入力する。
  4. [レコードタイプ]フィールド (または同等のもの) で、[TXT]を選択します。

  5. Time-to-Live (TTL) 値を選択するか、DNS プロバイダーのデフォルト値を使用します。

  6. レコードを保存します。

  7. DV 証明書オーダーを提出,し、dcv_methoddns-txt-token に設定したかを確認します。

ファイル認証

お持ちのウェブサイトの事前確定した場所に申請トークンを含む fileauth.txt ファイルをホスティングすることで、DV 証明書オーダーで、ド面名の利用権を確認することができます。ファイル認証の使用時、もっと一般的な間違いを避けるようにしてください。

お持ちのウェブサイトでファイルが利用できるようになると、DV 証明書を申請することができます。

申請トークンにファイル認証を使用する場合、必ず dcv_method 値を http-token に設定してください。

  1. テキストエディタ (Notepad など) を開き、申請トークンに貼り付けます。

  2. ファイルを fileauth.txt として保存します。

  3. 以下の場所のウェブサイトでファイルを利用できるようにします(必要に応じてディレクトリを作成)。

    http://[domain.name]/.well-known/pki-validation/fileauth.txt

Windows ベースサーバーでは、.well-known フォルダをコマンドラインで作成する必要があります。mkdir .well-known

  1. DV 証明書オーダーを提出,し、dcv_methodhttp-token に設定したかを確認します。

ステップ 6:DV 証明書オーダーを提出する

申請トークンを入れたら、DV 証明書オーダー申請の提出準備は完了です。これは [オーダー DV SSL] エンドポイントへの POST で実行します。

このエンドポイントへの POST が成功すると、201 作成済 HTTP 応答コードが返されます。すべての即時発行要件が満たされているため、完全証明書チェーンは、応答団体に戻されます。

DV 証明書オーダーをする場合、dcv_method 値が申請トークンの場所に対応しているかを確認してください。

前提条件のいずれかが満たされていない場合、即時発行はできません。完全証明書チェーンを受け取る代わりに、標準の [オーダー DV SSL 応答団体]を受け取ります。

cURL (DNS TXT)
curl -X POST \
  'https://www.digicert.com/services/v2/order/certificate/{{dv_ssl_certificate_id}}' \
  -H 'Content-Type: application/json' \
  -H 'X-DC-DEVKEY: {{api_key}}' \
  -d '{
    "certificate": {
        "common_name": "example.com",
        "csr": "<csr>",
        "server_platform": {
            "id": 2
        }
    },
    "validity_years": 1,
    "dcv_method": "dns-txt-token"
}'
cURL (File Auth)
curl -X POST \
  'https://www.digicert.com/services/v2/order/certificate/{{dv_ssl_certificate_id}}' \
  -H 'Content-Type: application/json' \
  -H 'X-DC-DEVKEY: {{api_key}}' \
  -d '{
    "certificate": {
        "common_name": "example.com",
        "csr": "<csr>",
        "server_platform": {
            "id": 2
        }
    },
    "validity_years": 1,
    "dcv_method": "http-token"
}'
201 Created
{
  "id": 112339,
  "certificate_id": 132345,
  "certificate_chain": [
    {
      "subject_common_name": "example.com",
      "pem": "<pem_certificate>"
    },
    {
      "subject_common_name": "DigiCert SHA2 Secure Server CA",
      "pem": "<pem_certificate>"
    },
    {
      "subject_common_name": "DigiCert Global Root CA",
      "pem": "<pem_certificate>"
    }
  ]
}