Skip to main content

ロードバランサーでDV証明書を自動化するためのDNS統合を作成する

デジサートがDV証明書を発行する前に、証明書申請に含まれるドメインに対する利用権の証明が行われる必要があります。

DV証明書のインストールを自動化するには、DNS統合を使用してDV証明書申請のドメインに対する利用権を証明します。このDCV方式では、申請を送信する前にDNS統合を作成する必要があります。

DNS統合は、デジサートの自動化サービスが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

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スクリプトを作成します。スクリプトを作成する、またはサンプルスクリプトのいずれかを変更して独自のスクリプトを定義することができます。

重要

デジサートは、センサーのインストールディレクトリなどのデフォルトの場所にスクリプトを設置することをお勧めします。例:sensorinstalldir/localscripts/script-to-upload.bat

Windows DNSスクリプト

Windowsの場合は、ドメインの利用権を証明するためにDNS .batスクリプトと埋め込みのPowerShellポストスクリプト(.ps1.py.ps、またはその他形式)の2つのスクリプトが必要になります。

埋め込みのDNS PowerShellポストスクリプトを作成する

  1. Notepad、またはその他のテキスト編集ツールを開きます。

  2. ログイン認証情報、DNSチャレンジ、および終了コードを定義します。

  3. .ps1.py.ps、または使用したいその他の拡張子を使用してファイルを保存します。保存場所をメモしておくようにしてください。

DNSスクリプトを作成する

  1. Notepad、またはその他のテキスト編集ツールを開きます。

  2. PowerShellポストスクリプトのファイルの場所のパス、DNSチャレンジを渡すための引数、および終了コードを定義します。

  3. .bat拡張子を使用してファイルを保存します。保存場所をメモしておくようにしてください。

Linux DNSスクリプト

Linuxの場合は、ドメインの利用権を証明するためにDNS .shスクリプトが必要になります。

DNSスクリプトを作成する

  1. Notepad、またはその他のテキスト編集ツールを開きます。

  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.

終了コード

開始するプログラムはすべて終了コードで終了し、それをオペレーティングシステムに報告します。終了コード(戻りコードと呼ばれることもあります)は、実行可能ファイルによって親プロセスに返されるコードです。

2. 終了コード

終了コード

説明

0

スクリプトの正常な実行。

1

何らかの理由でスクリプトの実行が失敗した。


サンプルスクリプト

AWS - DNS PowerShellポストスクリプト(.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チャレンジを決定します。これは、ポストスクリプトからその値を取得します。

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コマンド

ロードバランサーでのDV証明書自動化のためにセンサーにDNS統合またはプロバイダーを追加して設定するためのWindowとLinuxコマンドです。

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}