certbot 도구를 사용하여 letencrypt 와일드카드 인증서를 자동으로 갱신(갱신)할 수 없는 것이 걱정되시나요? 이 도구가 도움이 될 수 있습니다!
신청이나 갱신 여부에 관계없이 와일드카드 인증서라면 신청자의 도메인 이름은 dns-01을 통해서만 확인할 수 있습니다. 즉, certbot 운영자는 수동으로 DNS TXT 레코드를 추가해야 합니다.
와일드카드 인증서를 자동으로 갱신하기 위해 Cron(예: 1 1 */1 * * root certbot-auto renew)을 작성하면 Cron이 TXT 레코드를 자동으로 추가할 수 없으므로 갱신 작업이 실패하게 됩니다.
certbot은 DNS 서비스 공급자의 API 인터페이스를 호출하고 TXT 레코드를 동적으로 추가하는 셸 스크립트를 작성할 수 있는 후크를 제공하므로 수동 개입이 필요하지 않습니다.
certbot에서 공식적으로 제공하는 플러그인과 Hook 예제 중 국내 DNS 서버에 대한 예제가 없어서 이렇게 툴을 작성했는데, 현재 Alibaba Cloud DNS , Tencent Cloud DNS , Huawei Cloud NDS , GoDaddy를 지원합니다(certbot에는 없습니다. 공식 플러그인).
최근 여러 PR이 병합되었으며 테스트되지 않았습니다. 궁금한 점이 있으면 피드백을 보내주세요.
1: 다운로드
$ git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
$ cd certbot-letencrypt-wildcardcertificates-alydns-au
$ chmod 0777 au.sh
2: 구성
(1)도메인.ini
domain.ini 파일에 루트 도메인 이름이 포함되어 있지 않으면 직접 추가하세요.
(2) DNS API 키:
이 API 키는 무엇을 의미하나요? API를 통해 Alibaba Cloud DNS 및 Tencent Cloud DNS 레코드를 작동해야 하므로 도메인 이름 서비스 공급자로부터 API 키를 얻은 다음 au.sh 파일에서 구성해야 합니다.
(3) 동작 환경 선택
현재 이 도구는 후크 파일과 매개변수를 통해 호출되는 5가지 운영 환경과 시나리오를 지원합니다.
자신의 서버 환경과 도메인 이름 서비스 제공업체에 따라 후크 셸(해당 매개변수 포함)을 선택하세요. 구체적인 사용법은 아래를 참조하세요.
3: 인증서 신청
오류 테스트:
$ ./certbot-auto certonly -d *.example.com --manual --preferred-challenges dns --dry-run --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
디버그: DNS API를 작동할 때 API 토큰 권한 부족 등 일련의 문제가 발생할 수 있습니다. 관련 문제가 발생하면 /var/log/certd.log를 확인할 수 있습니다.
중요한 설명: --manual-auth-hook 및 --manual-cleanup-hook에는 세 가지 매개변수가 있습니다.
예를 들어 Python 환경을 선택하려는 경우 --manual-auth-hook 입력을 "/scriptdirectory/au.sh python aly add"로 변경하고 --manual-cleanup-hook 입력을 "/ 스크립트 디렉토리/au.sh python aly clean"
올바른지 확인한 후 실제로 실행합니다(--dry-run 매개변수 제거).
# 实际申请
$ ./certbot-auto certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
매개변수 설명(걱정할 필요 없음):
여러 도메인 이름에 대한 와일드카드 인증서( SAN 와일드카드 인증서 라고도 하는 하나의 인증서로 결합)를 신청하려면 다음과 같이 여러 -d 매개변수를 직접 입력하면 됩니다.
$ ./certbot-auto certonly -d *.example.com -d *.example.org -d www.example.cn --manual --preferred-challenges dns --dry-run --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
1: 머신의 모든 인증서를 갱신합니다.
$ ./certbot-auto renew --manual --preferred-challenges dns --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
2: 특정 인증서 갱신
먼저 머신에 있는 인증서 수를 살펴보세요.
$ ./certbot-auto certificates
그림과 같이 많은 인증서를 볼 수 있습니다.
simplehttps.com과 같은 인증서 이름을 기억하고 다음 명령 새로 고침을 실행합니다.
$ ./certbot-auto renew --cert-name simplehttps.com --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
/etc/crontab 파일을 편집합니다:
#证书有效期<30天才会renew,所以crontab可以配置为1天或1周
1 1 */1 * * root certbot-auto renew --manual --preferred-challenges dns --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
certbot 시스템이 웹 서비스(예: nginx, apache)를 실행하는 동일한 시스템인 경우 인증서를 성공적으로 갱신한 후 해당 웹 서버를 시작하고 다음 crontab을 실행할 수 있습니다.
# 注意只有成功renew证书,才会重新启动nginx
1 1 */1 * * root certbot-auto renew --manual --preferred-challenges dns --deploy-hook "service nginx restart" --manual-auth-hook "/脚本目录/au.sh php aly add" --manual-cleanup-hook "/脚本目录/au.sh php aly clean"
참고: 이 방법은 단일 시스템에서만 실행하는 것이 좋습니다. 인증서를 여러 웹 서버에 동기화하려면 현재 개발 중인 다른 솔루션이 필요합니다. 주요 목적은 인증서를 클러스터 서버에 동기화하는 것입니다.
공식 계정 QR 코드:
"HTTPS에 대한 심층 소개: 원칙에서 실천까지" QR 코드: