Encrypt가 다음과 같이 발표했습니다 .
ACME DNS 챌린지 지원
./letsencrypt-auto
DNS 챌린지 도메인 유효성 검사를 사용하여 새 인증서를 생성하려면 어떻게합니까 ?
편집
의미 : http/https
대상 도메인의 DNS 영역에 특정 TXT 레코드를 추가하여 도메인 소유권을 증명할 수있는 새로 발표 된 기능 (2015-01-20)을 사용하여 포트 바인딩을 피하려면 어떻게해야 합니까?
Encrypt가 다음과 같이 발표했습니다 .
ACME DNS 챌린지 지원
./letsencrypt-auto
DNS 챌린지 도메인 유효성 검사를 사용하여 새 인증서를 생성하려면 어떻게합니까 ?
편집
의미 : http/https
대상 도메인의 DNS 영역에 특정 TXT 레코드를 추가하여 도메인 소유권을 증명할 수있는 새로 발표 된 기능 (2015-01-20)을 사용하여 포트 바인딩을 피하려면 어떻게해야 합니까?
답변:
현재 수동 모드에서 certbot LetsEncrypt 클라이언트로 도 DNS 유효성 검사를 수행 할 수 있습니다. 자동화도 가능합니다 (아래 참조).
수동 플러그인으로 수동 확인을 수행 할 수 있습니다.
certbot -d bristol3.pki.enigmabridge.com --manual --preferred-challenges dns certonly
그러면 Certbot은 유효성 검사를 진행하기 위해 도메인에 대한 TXT 레코드를 수동으로 업데이트하는 지침을 제공합니다.
Please deploy a DNS TXT record under the name
_acme-challenge.bristol3.pki.enigmabridge.com with the following value:
667drNmQL3vX6bu8YZlgy0wKNBlCny8yrjF1lSaUndc
Once this is deployed,
Press ENTER to continue
DNS 레코드를 업데이트 한 후 Enter 키를 누르면 certbot이 계속되고 LetsEncrypt CA가 인증 확인을하면 인증서가 정상적으로 발급됩니다.
대화 형 작업을 최소화하고 certbot 질문에 대답하기 위해 더 많은 옵션이있는 명령을 사용할 수도 있습니다. 수동 플러그인은 아직 비 대화식 모드를 지원하지 않습니다.
certbot --text --agree-tos --email you@example.com -d bristol3.pki.enigmabridge.com --manual --preferred-challenges dns --expand --renew-by-default --manual-public-ip-logging-ok certonly
비 대화식 모드에서 실행되므로 수동 플러그인에서는 갱신이 작동하지 않습니다. 공식 Certbot 문서에 대한 추가 정보 .
새로운 Certbot 버전에서는 사용할 수있는 후크 등을, --manual-auth-hook
, --manual-cleanup-hook
. 후크는 작업을 수행하기 위해 Certbot에 의해 실행되는 외부 스크립트입니다.
정보는 검증 할 도메인, 챌린지 토큰과 같은 환경 변수로 전달됩니다. 바르 : CERTBOT_DOMAIN
, CERTBOT_VALIDATION
, CERTBOT_TOKEN
.
certbot certonly --manual --preferred-challenges=dns --manual-auth-hook /path/to/dns/authenticator.sh --manual-cleanup-hook /path/to/dns/cleanup.sh -d secure.example.com
고유 한 핸들러를 작성하거나 이미 존재하는 것을 사용할 수 있습니다 (예 : Cloudflare DNS).
공식 Certbot 후크 설명서 에 대한 추가 정보
DNS 인증 확인을 자동화하려는 경우 현재 vanila certbot으로는 불가능합니다. 업데이트 : Certbot 훅으로 일부 자동화가 가능합니다.
따라서 DNS 자동화를 통한 스크립팅을 지원하는 간단한 플러그인을 만들었습니다. certbot-external-auth 로 사용할 수 있습니다 .
pip install certbot-external-auth
DNS, HTTP, TLS-SNI 검증 방법을 지원합니다. 핸들러 모드 또는 JSON 출력 모드에서 사용할 수 있습니다.
핸들러 모드에서 certbot + 플러그인은 외부 후크 (프로그램, 쉘 스크립트, python 등)를 호출하여 유효성 검사 및 설치를 수행합니다. 실제로 입력 인수 (도메인, 토큰)를 가져오고 DNS를 변경하는 간단한 핸들러 / 쉘 스크립트를 작성합니다. 핸들러가 완료되면 certbot은 평소와 같이 유효성 검사를 진행합니다.
이것은 당신에게 추가 유연성을 제공, 갱신도 가능합니다.
처리기 모드는 탈수 된 DNS 후크 (이전 letsencrypt.sh) 와도 호환됩니다 . 공통 공급자 (예 : CloudFlare, GoDaddy, AWS)에 대한 많은 DNS 후크가 이미 있습니다. 저장소에는 광범위한 예제 및 예제 핸들러가있는 README가 있습니다.
탈수 된 DNS 후크의 예 :
certbot \
--text --agree-tos --email you@example.com \
--expand --renew-by-default \
--configurator certbot-external-auth:out \
--certbot-external-auth:out-public-ip-logging-ok \
-d "bristol3.pki.enigmabridge.com" \
--preferred-challenges dns \
--certbot-external-auth:out-handler ./dehydrated-example.sh \
--certbot-external-auth:out-dehydrated-dns \
run
다른 플러그인 모드는 JSON 모드입니다. 한 줄에 하나의 JSON 객체를 생성합니다. 이를 통해 Ansible 또는 일부 배치 관리자가 certbot을 호출하는 등보다 복잡한 통합이 가능합니다. 통신은 STDOUT 및 STDIN을 통해 수행됩니다. Cerbot은 유효성 검사를 수행하기 위해 데이터가 포함 된 JSON 객체를 생성합니다.
certbot \
--text --agree-tos --email you@example.com \
--expand --renew-by-default \
--configurator certbot-external-auth:out \
--certbot-external-auth:out-public-ip-logging-ok \
-d "bristol3.pki.enigmabridge.com" \
--preferred-challenges dns \
certonly 2>/dev/null
{"cmd": "perform_challenge", "type": "dns-01", "domain": "bs3.pki.enigmabridge.com", "token": "3gJ87yANDpmuuKVL2ktfQ0_qURQ3mN0IfqgbTU_AGS4", "validation": "ejEDZXYEeYHUxqBAiX4csh8GKkeVX7utK6BBOBshZ1Y", "txt_domain": "_acme-challenge.bs3.pki.enigmabridge.com", "key_auth": "3gJ87yANDpmuuKVL2ktfQ0_qURQ3mN0IfqgbTU_AGS4.tRQM98JsABZRm5-NiotcgD212RAUPPbyeDP30Ob_7-0"}
DNS가 업데이트되면 호출자는 줄 바꿈 문자를 certbot의 STDIN에 전송하여 유효성 검사를 계속할 수 있음을 알립니다.
이를 통해 중앙 관리 서버에서 자동화 및 인증서 관리가 가능합니다. 설치를 위해 SSH를 통해 인증서를 배포 할 수 있습니다.
자세한 내용은 certbot-external-auth GitHub 의 readme 및 예제를 참조하십시오 .
편집 : DNS 유효성 검사 문제와 플러그인 사용법을 설명 하는 새로운 블로그 게시물 도 있습니다.
편집 : 우리는 현재 Ansible 2 단계 유효성 검사를 수행하고 있으며 곧 종료됩니다.
certbot certonly --preferred-challenges dns -d example.com
초기 요청에 수동 방법 ( )을 사용할 수 있습니다 . A 레코드를 테스트하고 전환 한 후 이전과 certbot certonly webroot -d example.com -w /path/to/webroot
정확히 동일한 도메인 이름을 사용하여 일반적인 웹 루트 방법 ( )을 사용하십시오. 올바르게 수행하면 certbot은 기존 인증서 / 구성을 인식하고 갱신 설정을 업데이트하므로 나중에 인증서가 자동으로 갱신됩니다.
dehydrated
클라이언트를 사용하여 DNS 유효성 검사를 사용하여 인증서를 얻을 수있었습니다 .
https://github.com/lukas2511/dehydrated
./dehydrated --cron --domain my.domain.example.com --hook ./hook.route53.rb --challenge dns-01
도메인에 올바른 DNS 유효성 검사 후크를 사용해야하지만 다음과 같은 몇 가지 옵션이 있습니다.
https://github.com/lukas2511/dehydrated/wiki/Examples-for-DNS-01-hooks
route53.rb
후크 스크립트에 정의 된 몇 가지 gem 의존성을 설치해야한다는 것입니다 .
현재 공식 클라이언트는 아직 DNS-01 챌린지 유형을 지원하지 않습니다.
https://community.letsencrypt.org/t/status-of-official-letsencrypt-clients-dns-01-challenge-support/9427을 참조 하십시오.
나는 이것을 보지 않아서 정말로 모른다. 저의 높은 수준의 이해는 "DNS 도전에 대한 Python 클라이언트의 지원은 아직 없습니다".
사용할 API를 제공하지 않는 DNS 제공 업체에 대해 Lets Encrypt DNS 확인을 사용할 수 있도록 하는 letsencrypt.sh 클라이언트 용 후크 스크립트 를 작성했습니다 (일명 수동 입력 및 확인 필요).
https://github.com/jbjonesjr/letsencrypt-manual-hook 에서 확인할 수 있습니다.
이전 답변에서 언급했듯이 다음을 사용하여 DNS로 도메인을 쉽게 확인할 수 있습니다.
apt-get install -y git ruby letsencrypt
git clone https://github.com/lukas2511/dehydrated.git
git clone https://github.com/jbjonesjr/letsencrypt-manual-hook.git dehydrated/hooks/manual
./dehydrated/dehydrated -c -t dns-01 -d www.example.com -k ./dehydrated/hooks /manual/manual_hook.rb
다른 조합을 시도한 후에 이것은 탈수 되고 수작업으로 된 git 저장소를 사용하여 나에게 도움이되었습니다 . 아래 단계가 도움이된다면 이 저장소 를 별표로 표시하는 것을 잊지 마십시오
참고 : 이것은 panticz.de 및 alexcline의 답변에 추가됩니다.
~$ git clone https://github.com/lukas2511/dehydrated.git
~$ git clone https://github.com/jbjonesjr/letsencrypt-manual-hook.git dehydrated/hooks/manual
~$ cd dehydrated
~$ ./dehydrated --register --accept-terms
~$ ./dehydrated --cron --challenge dns-01 --domain your.domain.com --hook ./hooks/manual/manual_hook.rb
#
# !! WARNING !! No main config file found, using default config!
#
Processing your.domain.com
+ Signing domains...
+ Creating new directory /Users/vikas/dehydrated/certs/your.domain.com ...
+ Creating chain cache directory /Users/vikas/dehydrated/chains
+ Generating private key...
+ Generating signing request...
+ Requesting authorization for your.domain.com...
+ 1 pending challenge(s)
+ Deploying challenge tokens...
Checking for pre-existing TXT record for the domain: '_acme-challenge.your.domain.com'.
Create TXT record for the domain: '_acme-challenge.your.domain.com'. TXT record:
'gkIxxxxxxxIcAESmjF8pjZGQrrZxxxxxxxxxxx'
Press enter when DNS has been updated...
위의 명령을 실행 한 후 해시를 얻고 DNS에 TXT 레코드를 만듭니다 . 아래 명령이나 GSuite Toolbox를 실행하여 작동하는지 확인하십시오
~$ dig TXT _acme-challenge.your.domain.com. +short @8.8.8.8
"gkIxxxxxxxIcAESmjF8pjZGQrrZxxxxxxxxxxx"
~$
이제를 눌러 입력 프롬프트에서. TXT 레코드가 업데이트되었지만이 기능이 작동하지 않았습니다. Ctrl + C를 누르고 명령을 다시 실행해야했습니다.
~$ ./dehydrated --cron --challenge dns-01 --domain your.domain.com --hook ./hooks/manual/manual_hook.rb
#
# !! WARNING !! No main config file found, using default config!
#
Processing your.domain.com
+ Signing domains...
+ Generating private key...
+ Generating signing request...
+ Requesting authorization for your.domain.com...
+ 1 pending challenge(s)
+ Deploying challenge tokens...
Checking for pre-existing TXT record for the domain: '_acme-challenge.your.domain.com'.
Found gkIxxxxxxxIcAESmjF8pjZGQrrZxxxxxxxxxxx. match.
+ Responding to challenge for your.domain.com authorization...
Challenge complete. Leave TXT record in place to allow easier future refreshes.
+ Challenge is valid!
+ Requesting certificate...
+ Checking certificate...
+ Done!
+ Creating fullchain.pem...
+ Walking chain...
+ Done!
~$
이제 공공 및 개인 인증서가 여기에 있습니다.
$ ls certs/your.domain.com/privkey.pem certs/your.domain.com/fullchain-1517576424.pem
갱신하려면 (최소 대기 시간은 30 일) 동일한 명령을 다시 입력하십시오.
~$ ./dehydrated --cron --challenge dns-01 --domain your.domain.com --hook ./hooks/manual/manual_hook.rb
휴고 랜도 이동 (에 ACME 클라이언트를 작성 https://github.com/hlandau/acme (BIND의은 nsupdate 프로토콜) DNS 문제를 지원합니다). 그것은 적어도 18 개월 동안 완벽하게 작동했습니다.