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 提供程序的列表。

1. DNS 提供商

Amazon Route 53

Azure

Cloudflare

CloudXNS

DreamHost

Digital Ocean

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 2022, 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 脚本。您可以创建脚本或通过修改其中一个示例脚本来定义脚本。

重要

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 2022, 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.

退出代码

您启动的每个程序都会以退出代码终止并将其报告给操作系统。退出代码,有时也称为返回代码,是可执行文件返回给父进程的代码。

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
    #$Change.ResourceRecordSet.ResourceRecords.Add(@{Value=$Value})
    $Change.ResourceRecordSet.ResourceRecords.Add(@{Value=if ($Type -eq "TXT") {"""$Value"""} else {$Value}})
 
    # 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%

注意

%* 确定 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 命令

Windows 和 Linux 命令,用于将 DNS 集成或提供程序添加到传感器并进行配置,在负载均衡器上实现 DV 证书自动化。

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}



使用自定义 DNS 脚本创建 DNS 集成

在开始之前

首先为要自动安装 DV 证书的操作系统创建 DNS 脚本。您可以创建脚本或通过修改其中一个示例脚本来定义脚本。

重要

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 2022, 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.

示例脚本

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
    #$Change.ResourceRecordSet.ResourceRecords.Add(@{Value=$Value})
    $Change.ResourceRecordSet.ResourceRecords.Add(@{Value=if ($Type -eq "TXT") {"""$Value"""} else {$Value}})
 
    # 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%

注意

%* 确定 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 命令

Windows 和 Linux 命令,用于将 DNS 集成或提供程序添加到传感器并进行配置,在负载均衡器上实现 DV 证书自动化。

4. 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}