Skip to main content

建立 DNS 整合以自動化負載平衡器上的 DV 憑證

在 DigiCert 可以發行 DV 憑證前,您必須證明您對憑證要求中的網域擁有控制權。

關於自動化 DV 憑證安裝,請使用 DNS 整合證明您有您的 DV 憑證要求中的網域的控制權。關於此 DCV 方法,您必須在提交要求前建立 DNS 整合。

您的 DNS 整合允許 DigiCert 自動化服務使用您的認證將 DNS 挑戰放置在 DNS 伺服器上和完成驗證檢查。DNS 挑戰作為自動化程序的一部份自動產生。一完成網域驗證時,自動化將成功並安裝 DV 憑證。

您可以使用支援的 DNS 提供者或自訂的 DNS 指令集建立 DNS 整合。

範例:DNS 挑戰

example.com,example1.com,example2.com
dns-txt-token
342893284294sfjdkfjshfCOPY 

在您開始前

檢視自動化支援的 DNS 提供者

  1. 登入感應器主機。

  2. 前往感應器 CLI 目錄。

    cd install_dir/cli

    其中的 install_dir 是供感應器使用的安裝目錄。

  3. 執行 listsupporteddns 命令。

    • Windows:listsupporteddns.bat

    • Linux:./listsupporteddns.sh

以下是自動化支援 DNS 提供者的清單。

Table 1. DNS 提供者

Amazon Route 53

Azure

Cloudflare

CloudXNS

Digital Ocean

DNS Trust Manager (DNS Made Easy)

DreamHost

GoogleDNS

Go Daddy

NS1

OVH

RFC2136

Sakura Cloud


建立與 DNS 提供者整合的 DNS。

  1. 登入感應器主機。

  2. 前往感應器 CLI 目錄。

    cd install_dir/cli

    其中的 install_dir 是供感應器使用的安裝目錄。

  3. 執行 adddnsintegration 命令。

    • Windowsadddnsintegration.bat -type <dns_provider_name>

    • Linux./adddnsintegration.sh -type <dns_provider_name>

  4. 當您輸入命令時,將會出現給每個提供者的一系列提示。提供資訊,然後按 Enter

範例:adddnsintegration.bat -type route53

C:\Program Files\DigiCert\DigiCert sensor\cli>adddnsintegration.bat -type route53

Sensor CLI. Copyright 2023, DigiCert Inc.

Add a DNS integration to automate DV certificates. 

Enter alias:Route53Valid
Access key id:AKIAZC26PJRAX775JVKE
Secret key:
Confirm secret key:

DNS integration route53 added.
After adding the DNS integration, go back to CertCentral and link the integration to the load balancer where you want to automate a DV certificate.

建立與自訂的 DNS 指令集整合的 DNS

在您開始前

在您開始前,請為您要自動化 DV 憑證安裝的作業系統建立 DNS 指令集。您可以建立指令集或修改其中一個樣本指令集以定義您的指令集。

Important

DigiCert 建議將指令集放置在預設位置中,例如感應器的安裝目錄。例如:sensorinstalldir/localscripts/script-to-upload.bat

Windows DNS 指令集

對於 Windows,您需要兩個指令集證明您對於網域有控制權:DNS .bat 指令集和內嵌的 PowerShell Postscript (.ps1.py.ps 或任何其他格式)。

建立內嵌的 DNS PowerShell Postscript

  1. 開啟記事本或任何其他文字編輯工具。

  2. 定義登入認證、DNS 挑戰和結束代碼。

  3. 使用 .ps1.py.ps,或您選擇的任何其他副檔名儲存檔案。確定記錄位置。

建立 DNS 指令集

  1. 開啟記事本或任何其他文字編輯工具。

  2. 定義 PowerShell Postscript 檔案位置路徑、通過 DNS 挑戰的引數和結束代碼。

  3. 使用副檔名 .bat 儲存檔案。確定記錄位置。

Linux DNS 指令集

對於 Linux,您需要 DNS .sh 指令集證明對於網域有控制權。

建立 DNS 指令集

  1. 開啟記事本或任何其他文字編輯工具。

  2. 定義登入認證、DNS 挑戰和結束代碼。

  3. 使用副檔名 .sh 儲存檔案。確定記錄位置。

建立自訂的 DNS 整合

  1. 登入感應器主機。

  2. 前往感應器 CLI 目錄。

    cd install_dir/cli

    其中的 install_dir 是供感應器使用的安裝目錄。

  3. 執行 adddnsintegration 命令。

    • Windowsadddnsintegration.bat -type custom

    • Linux./adddnsintegration.sh -type custom

  4. 當您輸入命令時,出現一系列提示。提供資訊,然後按 Enter。

範例:./adddnsintegration.sh -type custom

[root@c7-sowjanya-124 cli]# ./adddnsintegration.sh -type custom

Sensor CLI.  Copyright 2023, DigiCert Inc.
Add a DNS integration to automate DV certificates.

Enter alias:CustomeDNS
Script file path:/tmp/test.sh

DNS integration custom added.
After adding the DNS integration, go back to CertCentral and link the integration to the load balancer where you want to automate a DV certificate.

結束代碼

您開始使用的每個程式都以結束代碼終止,並將其報告給作業系統。結束代碼有時稱為傳回代碼,是可執行檔傳回給父項程序的代碼。

Table 2. 結束代碼

結束代碼

說明

0

成功執行指令集。

1

因任何原因無法執行指令集。


樣本指令集

AWS - DNS PowerShell postscript (.ps1)

#ensure AWS PStools are installed incl
#https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up-windows.html
#Install-Module -Name AWS.Tools.Installer
#Install-AWSToolsModule AWS.Tools.Route53
#Set-AWSCredential -AccessKey <accesskey> -SecretKey <secretkey> -StoreAs TestDNSProfile

Import-Module AWSPowerShell
Function Set-R53Record {
 
    # Entry parameters
    Param (
		[Parameter(Mandatory=$True)] [String]$Profile,
        [Parameter(Mandatory=$True)][String]$Domain,
        [Parameter(Mandatory=$True)][String]$Type,
        [Parameter(Mandatory=$True)][String]$Name,
        [Parameter(Mandatory=$True)][String]$Value,
        [Int]$TTL = 300,
        [String]$Comment
    )
 
    $DomainDot = $Domain + "."
 
    # Create two objects for R53 update
    $Change = New-Object Amazon.Route53.Model.Change
    $Change.Action = "UPSERT"
    # CREATE: Creates a resource record set that has the specified values.
    # DELETE: Deletes an existing resource record set that has the specified values.
    # UPSERT: If a resource record set doesn't already exist, AWS creates it. If it does, Route 53 updates it with values in the request.
    $Change.ResourceRecordSet = New-Object Amazon.Route53.Model.ResourceRecordSet
    $Change.ResourceRecordSet.Name = "$Name.$Domain"
    $Change.ResourceRecordSet.Type = $Type
    $Change.ResourceRecordSet.TTL = $TTL
    # For TXT-based DNS challenges, value must be in quotes
    $challengeValue = if ($Type -eq "TXT") {"""$Value"""} else {$Value}
    $Change.ResourceRecordSet.ResourceRecords.Add(@{Value=$challengeValue})
 
    # Get hosted zone
    $HostedZone = Get-R53HostedZones -ProfileName $Profile| Where-Object { $DomainDot.EndsWith($_.Name) }
    Write-Output "Found HostedZone:$HostedZone"
    # Set final parameters and execute
    $Parameters = @{
        HostedZoneId = $HostedZone.Id
        ChangeBatch_Change = $Change # Object
        ChangeBatch_Comment = $Comment # "Edited A record"
    }
   return Edit-R53ResourceRecordSet -ProfileName $Profile @Parameters
}

if($args.Length -ne 1){
    Write-Output "Args not found"
    exit -1;
}

$fileInput = Get-Content $args[0]
if ($fileInput.Length -lt 3){
    Write-Output "File not found"
   exit -1;
}
$tempDomains = $fileInput[0].Split(",")
$challenge = $fileInput[2]
$domains = @()
foreach ($d in $tempDomains)
    {
        if ("$d" -ne "null")
        {
            Write-Output $d
            $domains = $domains += $d
        }
    }

foreach ($domain in $domains)
{     
    Set-R53Record -Profile DNSProfileName -Domain $domain -Type "TXT" -Name "_dnsauth" -Value $challenge -TTL 86400 -Comment "DNS challenge for $domain"
}

DNS .bat 指令集

echo "Invoking DNS script"
pushd %~dp0
powershell.exe -File {DNSPostscriptPath} %*
echo "Exit Code : %errorlevel%"
set returnCode=%errorlevel%
popd
EXIT /B %returnCode%

Note

%* 判斷 DNS 挑戰。自 Postscript 擷取值。

AWS - DNS .sh 指令集

#!/usr/bin/bash

set_R53_Record(){
    Profile=$1
    Domain=$2
    Type=$3
    Name=$4
    Value=$5
    TTL=$6
    Comment=$7
    DomainDot="$Domain."
    echo "Profile:$Profile Domain:$Domain"
    HOSTEDZONEID=$(/usr/local/bin/aws route53 list-hosted-zones --profile $Profile | jq '.HostedZones | .[] | select(.Name|inside('\"$DomainDot\"')) | .Id' | tr -d '"')
    cat > change-batch.json << EOL
    {"Comment":"$Comment","Changes":[{"Action":"UPSERT","ResourceRecordSet":{"Name":"$Name.$Domain","Type":"$Type","TTL":$TTL,"ResourceRecords":[{"Value":"\"$Value\""}]}}]}
EOL
    /usr/local/bin/aws route53 change-resource-record-sets --hosted-zone-id $HOSTEDZONEID --profile $Profile --change-batch file://change-batch.json
}


if [ "$#" -ne 1 ]; then
    echo "Args not found"
    exit -1;
fi

 IFS=$'\n' read -d '' -r -a lines < $1

if [ ${#lines[@]} != 3 ]; then
    echo "File not found"
    exit -1;
fi

challenge=${lines[2]}

IFS=',' read -ra domains <<< "${lines[0]}"
for domain in "${domains[@]}"; do
    set_R53_Record default $domain "TXT" "_dnsauth" $challenge 86400 "DNS challenge for $domain"
done

DNS 整合 CLI 命令

Window 和 Linux 命令,用於新增和設定 DNS 整合或提供者到負載平衡器的 DV 憑證自動化的感應器中。

Table 3. DNS 整合命令

命令

語法

說明

Windowsadddnsintegration.bat

adddnsintegration.bat -type {dns_provider_name}

新增 DNS 整合以自動化 DV 憑證。

Linuxadddnsintegration.sh

./adddnsintegration.sh -type {dns_provider_name}

Windowslistsupporteddns.bat

-

請檢視完整的支援 DNS 提供者清單。

Linuxlistsupporteddns.sh

Windowslistdnsintegration.bat

listdnsintegration.bat -type {dns_provider_name}

請檢視以感應器設定的 DNS 整合的清單。

Linuxlistdnsintegration.sh

./listdnsintegration.sh -type {dns_provider_name}

Windowsupdatednsintegration.bat

updatednsintegration.bat - alias {alias_name}

更新 DNS 整合。

Linuxupdatednsintegration.sh

./updatednsintegration.sh - alias {alias_name}

Windowsdeletednsintegration.bat

deletednsintegration.bat - alias {alias_name}

從感應器中刪除 DNS 整合。

Linuxdeletednsintegration.sh

./deletednsintegration.sh - alias {alias_name}