LetsEncrypt 와일드 카드 인증서 업데이트 자동화 (route53에만 해당)
과제·배경·개요
LetsEncrypt 와일드카드 인증서 업데이트에서 certbot renew
를 실행하면 다음 오류가 발생합니다.
와일드카드 인증서의 경우 해당 도메인을 소유하고 있음을 증명하기 위해 해당 호스트에 _acme-challenge.nyango.com
라는 TXT 레코드를 추가해야 하지만 단순히 renew
설정할 수 없기 때문입니다. (TXT 레코드의 값은 certbot에서 ad hoc로 지정되므로 미리 설정할 수 없습니다)
자동화 스크립트를 작성할 수 있는 것 같습니다만, 사양을 조사하는데 얼마나 시간이 걸리는지 상상도 할 수 없어 신경 쓰지 않습니다. LetsEncrypt 증명서의 유효기간은 3개월이므로 2.5개월에 1회 정도 수동으로 시코시코 갱신하면 됩니다만, 그것은 그것으로 귀찮다.
자동화 할 수 없는지 조사해 보면 방법이 있었으므로 정리했습니다
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/nyango.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Could not choose appropriate plugin: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',)
Attempting to renew cert (nyango.com) from /etc/letsencrypt/renewal/nyango.com.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',). Skipping.
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/nyango.com/fullchain.pem (failure)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/nyango.com/fullchain.pem (failure)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 renew failure(s), 0 parse failure(s)
자동화 방법
Route53 제한을 사용하는 경우 certbot-dns-route53
라는 플러그인을 사용하여 자동화할 수 있습니다.
certbot renew
때때로 옵션으로 이 플러그인을 지정하면 위에서 설명한 TXT 레코드를 동적으로 작성해주는 것 같습니다. (실행 후 확인했는데 TXT 레코드가 존재하지 않았기 때문에 마지막으로 삭제해주는 것 같습니다. 친절!)
route53에 액세스 할 필요가 있으므로, 필요한 최소한의 권한을 가지는 IAM 정책을 IAM 유저에게 할당해, 그 자격 증명을 certbot
를 실행하는 단말(의 실행 유저)에 할당하면 OK입니다.
플러그인 설치
# pip install certbot-dns-route53
IAM 정책 정의
{
"Version": "2012-10-17",
"Id": "certbot-dns-route53 policy",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:ListHostedZones",
"route53:GetChange"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"route53:ChangeResourceRecordSets"
],
"Resource": [
"arn:aws:route53:::hostedzone/★HOSTZONE ID★"
]
}
]
}
호스팅 영역 ID는 Route53에서 확인합니다.
IAM 사용자 생성
IAM 사용자를 만들고 위의 정책을 할당합니다. 자격 증명(액세스 키 및 비밀 키)을 삼가합니다.
IAM 사용자의 자격 증명을 단말기로 설정
certbot renew
를 실행하는 단말(의 실행 유저)에 자격 증명을 설정. 이 경우 루트 사용자로 설정됩니다.
# aws configure
위를 실행하면 ~/.aws/credencials
에 등록됩니다.
[default]
aws_secret_access_key = dscyiPgxxxxxxxxxxxxxxxxxxxxxx
aws_access_key_id = AKIAxxxxxxxxxxxxxxxxxxxxxxxx
테스트 실행
certbot renew --force-renewal --no-self-upgrade --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --dns-route53
성공하면 콘솔 끝에 다음 정보가 출력됩니다.
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/nyango.com/fullchain.pem (success)
스크립트 작성
인증서를 업데이트한 후 http 서버를 다시 시작하는 스크립트를 준비합니다.
/root/update_cert_wildcard.sh#! /bin/bash
/bin/certbot renew --force-renewal --no-self-upgrade --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --dns-route53
/bin/systemctl restart httpd.service
(2019/09/04 추가)
다음 가져오기 오류가 발생했습니다.ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
대처
# pip install --upgrade pip
# pip install requests --ignore-installed
# pip install --upgrade --force-reinstall 'requests==2.6.0'
cron에 할당
0 4 * * 0 /root/update_cert_wildcard.sh
참고 URL
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/nyango.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Could not choose appropriate plugin: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',)
Attempting to renew cert (nyango.com) from /etc/letsencrypt/renewal/nyango.com.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',). Skipping.
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/nyango.com/fullchain.pem (failure)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/nyango.com/fullchain.pem (failure)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 renew failure(s), 0 parse failure(s)
Route53 제한을 사용하는 경우
certbot-dns-route53
라는 플러그인을 사용하여 자동화할 수 있습니다.certbot renew
때때로 옵션으로 이 플러그인을 지정하면 위에서 설명한 TXT 레코드를 동적으로 작성해주는 것 같습니다. (실행 후 확인했는데 TXT 레코드가 존재하지 않았기 때문에 마지막으로 삭제해주는 것 같습니다. 친절!)route53에 액세스 할 필요가 있으므로, 필요한 최소한의 권한을 가지는 IAM 정책을 IAM 유저에게 할당해, 그 자격 증명을
certbot
를 실행하는 단말(의 실행 유저)에 할당하면 OK입니다.플러그인 설치
# pip install certbot-dns-route53
IAM 정책 정의
{
"Version": "2012-10-17",
"Id": "certbot-dns-route53 policy",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:ListHostedZones",
"route53:GetChange"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"route53:ChangeResourceRecordSets"
],
"Resource": [
"arn:aws:route53:::hostedzone/★HOSTZONE ID★"
]
}
]
}
호스팅 영역 ID는 Route53에서 확인합니다.
IAM 사용자 생성
IAM 사용자를 만들고 위의 정책을 할당합니다. 자격 증명(액세스 키 및 비밀 키)을 삼가합니다.
IAM 사용자의 자격 증명을 단말기로 설정
certbot renew
를 실행하는 단말(의 실행 유저)에 자격 증명을 설정. 이 경우 루트 사용자로 설정됩니다.# aws configure
위를 실행하면
~/.aws/credencials
에 등록됩니다.[default]
aws_secret_access_key = dscyiPgxxxxxxxxxxxxxxxxxxxxxx
aws_access_key_id = AKIAxxxxxxxxxxxxxxxxxxxxxxxx
테스트 실행
certbot renew --force-renewal --no-self-upgrade --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --dns-route53
성공하면 콘솔 끝에 다음 정보가 출력됩니다.
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/nyango.com/fullchain.pem (success)
스크립트 작성
인증서를 업데이트한 후 http 서버를 다시 시작하는 스크립트를 준비합니다.
/root/update_cert_wildcard.sh
#! /bin/bash
/bin/certbot renew --force-renewal --no-self-upgrade --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --dns-route53
/bin/systemctl restart httpd.service
(2019/09/04 추가)
다음 가져오기 오류가 발생했습니다.
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
대처
# pip install --upgrade pip
# pip install requests --ignore-installed
# pip install --upgrade --force-reinstall 'requests==2.6.0'
cron에 할당
0 4 * * 0 /root/update_cert_wildcard.sh
참고 URL
Reference
이 문제에 관하여(LetsEncrypt 와일드 카드 인증서 업데이트 자동화 (route53에만 해당)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/s-katsumata/items/ae0fc84a42ee159edfaa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)