创建 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 提供程序。请参阅下面的 查看自动化支持的 DNS 提供程序 。
查看自动化支持的 DNS 提供程序
登录传感器主机。
转到传感器 CLI 目录。
cd install_dir/cli
其中 install_dir 是传感器的安装目录。
运行
listsupporteddns
命令。Windows:
listsupporteddns.bat
Linux:
./listsupporteddns.sh
以下是自动化支持的 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 集成
登录传感器主机。
转到传感器 CLI 目录。
cd install_dir/cli
其中 install_dir 是传感器的安装目录。
运行
adddnsintegration
命令。Windows:
adddnsintegration.bat -type <dns_provider_name>
Linux:
./adddnsintegration.sh -type <dns_provider_name>
输入命令后,页面上会显示每个提供商的一系列提示。输入信息并按 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 脚本。您可以创建脚本或通过修改其中一个示例脚本来定义脚本。
重要
DigiCert 建议将脚本放在默认位置,例如传感器的安装目录。例如:sensorinstalldir/localscripts/script-to-upload.bat
Windows DNS 脚本
对于 Windows,您需要两个脚本来证明您对域的控制权:DNS .bat 脚本和嵌入式 PowerShell postscript(.ps1、.py、.ps 或任何其他格式)。
创建嵌入式 DNS PowerShell postscript
打开记事本或任何其他文本编辑工具。
定义登录凭据、DNS 质询和退出代码。
以 .ps1、.py、.ps 扩展名保存文件,或选择其他扩展名。请务必记下位置。
创建 DNS 脚本
打开记事本或任何其他文本编辑工具。
定义 PowerShell postscript 文件位置路径、用于传递 DNS 质询的参数以及退出代码。
以 .bat 扩展名保存文件。请务必记下位置。
Linux DNS 脚本
对于 Linux,您需要 DNS .sh 脚本来证明您对域的控制权:
创建 DNS 脚本
打开记事本或任何其他文本编辑工具。
定义登录凭据、DNS 质询和退出代码。
以 .sh 扩展名保存文件。请务必记下位置。
创建自定义 DNS 集成
登录传感器主机。
转到传感器 CLI 目录。
cd install_dir/cli
其中 install_dir 是传感器的安装目录。
运行
adddnsintegration
命令。Windows:
adddnsintegration.bat -type custom
Linux:
./adddnsintegration.sh -type custom
输入命令后,页面上会显示一系列提示。输入信息并按 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.
退出代码
您启动的每个程序都会以退出代码终止并将其报告给操作系统。退出代码,有时也称为返回代码,是可执行文件返回给父进程的代码。
退出代码 | 描述 |
---|---|
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%
注意
%* 确定 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 证书自动化。
命令 | 句法 | 描述 |
---|---|---|
Windows: |
| 添加 DNS 集成使 DV 证书自动化。 |
Linux: |
| |
Windows: | - | 查看支持的 DNS 提供程序的完整列表。 |
Linux: | ||
Windows: |
| 查看使用传感器配置的 DNS 集成的列表。 |
Linux: |
| |
Windows: |
| 更新 DNS 集成。 |
Linux: |
| |
Windows: |
| 从传感器中删除 DNS 集成。 |
Linux: |
|