Skip to main content

부하 분산 장치에서 DV 인증서를 자동화하는 DNS 통합 만들기

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 포스트스크립트(.ps1.py.ps 또는 기타 형식)가 필요합니다

포함된 DNS PowerShell 포스트스크립트 만들기

  1. 메모장이나 다른 텍스트 편집 도구를 엽니다.

  2. 로그인 자격 증명, DNS 챌린지 및 종료 코드를 정의합니다.

  3. 파일을 .ps1.py.ps 또는 선택한 다른 확장명으로 저장합니다. 위치를 반드시 기록해 두십시오.

DNS 스크립트 만들기

  1. 메모장이나 다른 텍스트 편집 도구를 엽니다.

  2. PowerShell 포스트스크립트 파일 위치 경로, DNS 챌린지를 전달할 인수 및 종료 코드를 정의합니다.

  3. .bat 확장자로 파일을 저장합니다. 위치를 반드시 기록해 두십시오.

Linux 스크립트 만들기

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 포스트스크립트(.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 챌린지를 결정합니다. 해당 값은 포스트스크립트에서 검색합니다.

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 통합 또는 공급자를 추가하고 구성하기 위한 Windows 및 Linux 명령.

3. DNS 통합 명령

명령

구문

설명

Windowsadddnsintegration.bat

adddnsintegration.bat -type {dns_provider_name}

DV 인증서 자동화를 위해 DNS 통합을 추가.

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 포스트스크립트(.ps1.py.ps 또는 기타 형식)가 필요합니다

포함된 DNS PowerShell 포스트스크립트 만들기

  1. 메모장이나 다른 텍스트 편집 도구를 엽니다.

  2. 로그인 자격 증명, DNS 챌린지 및 종료 코드를 정의합니다.

  3. 파일을 .ps1.py.ps 또는 선택한 다른 확장명으로 저장합니다. 위치를 반드시 기록해 두십시오.

DNS 스크립트 만들기

  1. 메모장이나 다른 텍스트 편집 도구를 엽니다.

  2. PowerShell 포스트스크립트 파일 위치 경로, DNS 챌린지를 전달할 인수 및 종료 코드를 정의합니다.

  3. .bat 확장자로 파일을 저장합니다. 위치를 반드시 기록해 두십시오.

Linux 스크립트 만들기

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 포스트스크립트(.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 챌린지를 결정합니다. 해당 값은 포스트스크립트에서 검색합니다.

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 통합 또는 공급자를 추가하고 구성하기 위한 Windows 및 Linux 명령.

4. DNS 통합 명령

명령

구문

설명

Windowsadddnsintegration.bat

adddnsintegration.bat -type {dns_provider_name}

DV 인증서 자동화를 위해 DNS 통합을 추가.

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}