
저는 SAN(주체 대체 이름)을 사용하여 여러 도메인을 호스팅하는 웹 서버에서 단일 TLS 인증서를 생성하기 위해 EFF certbot ACME 클라이언트를 사용하고 있습니다. 지금까지 모든 도메인은 특정 Digital Ocean 팀에서 호스팅되었으며 Digital Ocean DNS 플러그인으로 구성된 certbot과 해당 팀이 여러 도메인(와일드카드 도메인 포함)이 포함된 인증서를 생성할 수 있도록 개인 액세스 토큰을 생성했습니다.
이제 고객은 자신이 모든 권한을 유지하려는 도메인을 제공하기를 원하므로 새로운 Digital Ocean 팀을 만들었고 DO 개인 액세스 토큰이 생성된 내 계정에 액세스 권한이 부여되었습니다. 안타깝게도 개인용 액세스 토큰은 팀을 위해 생성되었으며 다른 팀에서는 사용할 수 없다는 사실도 알게 되었습니다.
certbot 문서를 살펴봤지만 동일한 SAN 인증서에 대해 서로 다른 도메인에 대해 서로 다른 DO 자격 증명을 구성하는 방법을 찾을 수 없습니다. 이것이 가능합니까?
그렇지 않다면 이 사용 사례를 구현하기 위해 어떤 다른 대안을 제안하시겠습니까?
답변1
이는 내장된 인증 플러그인에서 지원되지 않는 것으로 보이지만 "수동 후크"를 사용하여 문제를 스크립팅하고 확인되는 각 도메인에 대해 확인 토큰을 생성하는 가장 좋은 방법을 선택하여 해결할 수 있습니다.
각각에 대해 개인 액세스 토큰이 있다고 가정하고 여러 Digital Ocean 팀/사용자의 도메인 확인을 지원하는 수동 후크 스크립트를 작성했습니다.스크립트는 여기에서 확인할 수 있습니다: https://gist.github.com/guss77/01f095623a1d2fd00869784554d3e1a5.
이를 사용하려면 Digital Ocean CLI 도구가 어딘가에 설치되어 있고 스크립트에서 구성되어 있는지 확인 doctl
하고 스크립트에서 개인 액세스 토큰도 설정해야 합니다(스크립트에도 필요하며 dig
몇 가지 일반적인 POSIX 셸 도구가 필요할 것으로 예상됨). 어디에서나 찾을 수 있지만 Linux 외부에서는 잘 작동하지 않을 수 있습니다).
그런 다음 플러그인 중 하나를 사용하는 대신 --dns*
다음을 사용하십시오.
--preferred-challenges=dns --manual \
--manual-auth-hook /path/to/certbot-hook.sh \
--manual-cleanup-hook /path/to/certbot-hook.sh
인증을 시도할 때 certbot은 이 스크립트를 호출하여 확인할 각 도메인에 대한 DNS 레코드를 생성합니다. 이에 대해 스크립트는 doctl
각 개인 액세스 토큰을 사용하여 사용 가능한 도메인 목록을 스캔하고 올바른 "영역"을 선택한 후 도구를 사용합니다. 레코드를 생성하는 곳입니다.
하지만 특히 DNS 전파 시간과 관련하여 이 접근 방식에 문제가 있는 경우가 있습니다. certbot은 DNS 플러그인에 대한 사용자 지정 DNS 전파 대기 시간 제한을 지원하지만 수동 모드에는 지원하지 않으며 이를 모방하는 좋은 방법은 없습니다.
답변2
나는 단순히 다른 구성 파일을 지정함으로써 이를 수행할 수 있다고 믿습니다.
에 따라certbot-dns-digitalocean
플러그인 문서자격 증명은 ini 파일에 제공됩니다.
--dns-digitalocean-credentials
DigitalOcean 자격 증명 INI 파일. (필수의)
다음과 같은 내용을 포함하는 ini 파일을 사용합니다.
dns_digitalocean_token = 0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff
서로 다른 자격 증명에 대해 서로 다른 파일을 생성하려는 경우 이러한 다른 파일을 지정하여 플러그인이 다른 자격 증명을 사용하도록 할 수 있습니다.
즉, 다음과 같은 것
certbot certonly \
--dns-digitalocean \
--dns-digitalocean-credentials ~/.secrets/certbot/digitalocean-foo.ini \
-d domain1.example
그리고
certbot certonly \
--dns-digitalocean \
--dns-digitalocean-credentials ~/.secrets/certbot/digitalocean-bar.ini \
-d domain2.example
두 개의 개별 파일의 자격 증명을 사용합니다.