Let’s encrypt wild 인증서 발급받기(with Route53)

By | 2020년 5월 3일
Table of Contents

Let’s encrypt wild 인증서 발급받기(with Route53)

참조

패키지 설치

sudo add-apt-repository ppa:certbot/certbot
sudo apt install python-certbot-nginx
sudo apt install python3-certbot-dns-route53

DNS TXT 자동화 설정추가

아래에 추가할 인증키는 기존에 쓰고 있는 인증키가 아니라, 아래에서 새로 생성할 인증키입니다.

sudo mkdir -p /root/.aws
sudo vi /root/.aws/credentials

[letsencrypt]
aws_access_key_id={AWS_Access_ID}
aws_secret_access_key={AWS_Secret_Key}
sudo chmod 640 /root/.aws/credentials

IAM 계정추가

aws.route53.letsencrypt 이라는 이름으로 IAM 계정을 추가합니다.(권한부여 X)

발급받은 인증키를 위 파일에 입력해줍니다.

sudo vi /root/.aws/credentials

호스팅존아이디를 찾습니다.

aws route53 list-hosted-zones-by-name |
    jq --arg name "skyer9.pe.kr." \
    -r '.HostedZones | .[] | select(.Name=="\($name)") | .Id'

정책생성을 하고 아래 내용을 입력합니다.
위에서 찾은 호스팅존아이디 를 입력해 줍니다.

{
    "Version": "2012-10-17",

    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "route53:ListHostedZones",
                "route53:GetChange"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect" : "Allow",
            "Action" : [
                "route53:ChangeResourceRecordSets"
            ],
            "Resource" : [
                "arn:aws:route53:::hostedzone/호스팅존아이디"
            ]
        }
    ]
}

정책을 위에서 생성한 계정에 부여합니다.

인증서 생성

기존에 다른 IAM 인증키가 있다면 잠시 옮겨줍니다.

mv ~/.aws/credentials ~/.aws/credentials.bak

아래 명령으로 인증서를 생성합니다.

sudo certbot certonly --dns-route53 -n \
  -d *.skyer9.pe.kr \
  -d skyer9.pe.kr \
  --server https://acme-v02.api.letsencrypt.org/directory
mv ~/.aws/credentials.bak ~/.aws/credentials

인증서 자동 갱신

sudo crontab -e
# ┌───────────── min (0 - 59)
# │ ┌────────────── hour (0 - 23)
# │ │ ┌─────────────── day of month (1 - 31)
# │ │ │ ┌──────────────── month (1 - 12)
# │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to
# │ │ │ │ │                  Saturday, or use names; 7 is also Sunday)
# │ │ │ │ │
# │ │ │ │ │
# * * * * *  command to execute
30 6 22 * * /usr/bin/certbot renew --renew-hook="systemctl reload nginx"

인증서 상태 확인

sudo certbot certificates

Route53 을 이용한 업데이트 실패시 임시조치

수동모드로 업데이트한다.

sudo certbot certonly --manual  --preferred-challenges=dns \
  -d *.skyer9.pe.kr \
  -d skyer9.pe.kr \
  --server https://acme-v02.api.letsencrypt.org/directory

중간에 Route53 에 _acme-challenge.skyer9.pe.kr 서브도메인을 추가하라고 한다.
TXT 유형으로 하고 값을 입력하라고 하는 랜덤문자열을 입력해준다.
2022-04-30 기준으로 따옴표는 자동으로 입력되므로 입력해주지 않는다.

답글 남기기