DV 憑證立刻發行

使用 API 訂購您的 DV 憑證時,通常時間都只是花費在等待要發行的憑證。遵照此工作流程指南中的步驟可以運用我們的立刻發行 DV 憑證功能,讓您可以立刻發行您 DV 憑證,並且減少您的 API 呼叫高達 70%。

若要要求 Encryption Everywhere DV 憑證,您必須遵照這些步驟並設定您帳戶的驗證金鑰。如果您不想要遵照,您將在提交要求時收到 auth_key_not_setup 錯誤。

概覽

為了善用立刻發行,您必須在提交您的 DV 憑證訂單前完成這些步驟。

  1. 建立您的 CertCentral 帳戶的驗證金鑰。
  2. 產生使用於 DV 憑證訂單的憑證簽章要求 (CSR)。
  3. 建立時間戳記以決定要求權杖有效期間。
  4. 使用您的驗證金鑰和 CSR 建構要求權杖。
  5. 新增產生的要求權杖到由 DV 憑證保護安全的網域。
  6. 提交您的 DV 憑證訂單。

如果在提交您的 DV 憑證訂單時,這些步驟全都已完成,我們會立刻發行您的 DV 憑證,並將在回應本文中將其傳回。如果略過這些步驟的其中任一個,則無法進行立刻發行。

步驟 1:建立驗證金鑰

首先,您需要建立您的您的 CertCentral 帳戶的驗證金鑰。您將使用此金鑰產生證明有網域的控制權的要求權杖。您可以用到建立驗證金鑰端點的 POST 建立驗證金鑰。

此端點的成功 POST 傳回 200 OK HTTP 回應。回應本文包括兩項關鍵資訊:

  • auth_key_id – 建立的驗證金鑰的唯一 ID。
  • auth_key – 針對您的 CertCentral 帳戶產生的驗證金鑰。

您的 CertCentral 帳戶僅能存在一個驗證金鑰。如果您的帳戶已有驗證金鑰,「建立驗證金鑰」端點會傳回 400 Bad Request HTTP 回應並有 auth_key_exists_for_account 錯誤。如果您遇到此錯誤,您可以使用驗證金鑰詳細資料端點取得您現有的驗證金鑰。

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)?

您一擁有您帳戶的驗證金鑰時,下一步就是建立憑證訂單的 CSR。您需要 CSR 以產生要求權杖。請確定在安裝憑證所在的伺服器上產生您的 CSR。

需要建立 CSR 的協助嗎?請參閱建立 CSR (憑證簽章要求)

步驟 3:建立時間戳記

時間戳記決定要求權杖的 30 天有效期間何時開始。建立時間戳記時,確定結果最終有效時段是否符合您提交您的 DV 憑證訂單的時間。如果您的訂單在有效時段之前或之後提交,則不會立刻發行。

您可以建立將來日期的時間戳記。但請不要在該日期前提交 DV 憑證訂單。由於要求權杖仍未"有效",,因此無法用於驗證網域。

決定要求權杖的有效期間視窗應何時開始後,您需要如以下所示格式化時間戳記。

generic
yyyyMMddhhmmss

例如,October 21, 2019 1:30:12 PM 會變成 20191021133012

步驟 4:產生要求權杖

要求權杖有由時間戳記中的資料決定的 30 天有效期間。產生要求權杖時,確定 30 天時間戳記視窗與您提交憑證訂單的時間相符。

現在您有您的驗證金鑰、CSR 和時間戳記,您已準備好產生用於證明有網域的控制權的要求權杖。此要求權杖允許您在下憑證訂單前,設定您網域的 DNS TX廿記錄或 fileauth.txt 檔案。

如何產生您的要求權杖

  1. 加上時間戳記到您的 PEM 格式的 CSR 中以建構要雜湊的機密。
  2. 使用 HMAC-SHA256 將機密雜湊,以驗證金鑰作為金鑰。
  3. 將結果的十六進位雜湊轉換成十進位 (base10) 雜湊值。
  4. 將十六進位雜湊值轉換成 base36 雜湊值。
  5. 確定 base36 雜湊值長度至少有 50 個字元。如果沒有,請加上 0 (0),直到長度有 50 個字元。
  6. 將時間戳記加到 base36 雜湊值上以建構最終要求。

此範例假碼顯示如何使用上述步驟產生要求代碼:

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 憑證立刻發行,您必項在訂購憑證前,將要求權杖放在這些位置之一。

  • 在作為 TXT 記錄的網域的 DNS 中。
  • 在您的網站上預先決定的位置的 fileauth.txt 檔案中。

一放置要求權杖後,您即可以提交您的 DV 憑證訂單。

DNS TXT

您可以建立包含要求權杖的 DNS TXT 記錄,證明在您的 DV 憑證訂單上有網域的控制權。一建立 DNS TXT 記錄後,您就可以要求您的 DV 憑證

使用您的要求權杖的 DNS TXT 時,確定將 dcv_method 值設定為 dns-txt-token

  1. 請前往您的 DNS 提供者的網站,然後建立新的 TXT 記錄。

  2. TXT 值欄位中,貼上要求權杖。

  3. 視您要保護安全的憑證訂單和網域而定,針對主機欄位執行這些之一:

    • 基本網域 (例如 example.com)
      留白或輸入 @ 符號 (視您的 DNS 需求而定)。
    • 子網域
      輸入要由憑證保護安全的子網域。
    • 授權網域名稱
      請輸入 _dnsauth
  4. 在記錄類型欄位 (或同等欄位) 中,選擇 TXT。

  5. 選擇存留時間 (TTL) 值,或使用您的 DNS 提供者的預設值。

  6. 儲存記錄。

  7. 提交您的 DV 憑證訂單,確定將 dcv_method 設定為 dns-txt-token.

檔案驗證

您可以在您網站的預定位置,託管包含要求權杖的 fileautu.txt 檔案,以證明對 DV 憑證訂單上的網域有控制權。確定避免使用檔案證時的其中一些常見錯誤

檔案在您的網站上可用時,您就可以要求您的 DV 憑證

使用您的要求權杖的驗證檔案時,確定將 dcv_method 值設定為 http-token

  1. 開啟文字編輯器 (例如記事本),然後貼在要求權杖中。

  2. 將檔案另存為 fileauth.txt。

  3. 在您的網站上使檔案在此位置可用 (視需要建立目錄)。

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

在基於 Windows 的伺服器上,必須透過命令列建立 .well-known 資料夾。mkdir .well-known

  1. 提交您的 DV 憑證訂單,確定將 dcv_method 設定為 http-token.

步驟 6:提交 DV 憑證訂單

您一放置要求權杖後,表示您已準備好提交您的 DV 憑證訂單要求。使用 POST (公佈) 到訂購 OV/EV SSL 端點完成此操作。

到此端點的成功 POST 將會產生 201 Created 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>"
    }
  ]
}