certbot?
간단하게 정리하면 환경에 맞춰 Let’s Encrypt 인증서를 자동으로 발급/갱신해주는 봇입니다. Let’s Encrypt의 인증서 발급 방식을 간단하게 이야기하자면, 인증서 요청 -> 도메인에 대한 소유권 확인 챌린지 -> 발급과 같은 절차를 밟습니다. certbot은 이러한 부분의 처리를 자동으로 수행해줍니다.
Install
]# wget https://dl.eff.org/certbot-auto ]# chmod a+x certbot-auto ]# ./certbot-auto
실행 권한을 추가한 스크립트를 실행하시면 필요한 의존성을 알아서 잘 설치해주게 됩니다.
필요한 의존성 설치를 위해 root 권한을 요구할 것입니다.
그리고 화면에 나온대로 선택해서 설정 해 주시면 되고
몇 가지 옵션을 보면
certonly : 인증서만을 얻어오겠음
–webroot : webroot 플러그인을 쓰겠음
-w /var/www/challenge : 챌린지 파일을 생성할 기준 폴더를 지정
-d some.site.com : 인증서를 생성할 도메인을 지정
Setup Certificate
발급된 인증서는 /etc/letsencrypt/live/sitename 폴더에 생성됩니다.
예제대로라면,
/etc/letsencrypt/live/some.site.com/fullchain.pem
/etc/letsencrypt/live/some.site.com/privkey.pem
처럼 인증서가 생성됩니다. 이를 서버 설정에 추가해주시면 됩니다.
ps: 다른 곳에서는 /etc/certbot/..에 생성되었다는 이야기도 있으니 참고하세요.
Renew certificate with cron
갱신은 그냥 이전과 동일한 방식으로 renew 명령을 실행해주면 됩니다. 잘 동작하는지 확인하시려면 –dry-run 옵션을 사용하세요.
그럼 이제 알아서 자동으로 갱신해줄 수 있도록 cronjob에 등록해봅시다.
]# ./certbot-auto renew --quiet --no-self-upgrade
등록해야하는 명령은 조금 다른 옵션을 가지고 있습니다. 본래 스크립트를 실행하면 자기 자신을 최신버전으로 업데이트하려고 시도하는데,
이 동작을 비활성화하기 위한 옵션과 로그를 무시하는 옵션을 넘겨주고 있습니다.
그럼 이제 crontab을 열고,
]# vi /etc/crontab # Begin Let's encrypt renew 0 19 1 1/3 * /bin/bash -l -c '/usr/bin/certbot-auto renew --quiet --no-self-upgrade' # End Let's encrypt renew
여기에서는 3개월에 한 번, 새벽 4시에 갱신을 시도하게끔 설정해뒀습니다.
Let’s Encrypt SSL 인증서의 유효기간은 90일
90일이 지나면 인증서가 만료(Expired) 되고 웹 사이트에 접속 시에 에러 메시지가 뜰 수 있지요.
이 경우에 인증서 기간 연장방법을 사용해도 제대로 인증서 적용이 되지 않습니다.
이 때는 아래와 같이 certbot-auto 파일이 설치된 폴더에 가서 renew 명령어를 –quiet 과 사용합니다.
]# ./certbot-auto renew --quiet
정상적으로 Let’s Encrypt 인증서가 설치됩니다. 마지막으로, 아파치 서버를 리스타트 시켜줍니다.
기존 생성한 인증서를 복사한 방법은 아래와 같습니다.
우선 인증서가 설치된 위치로 이동합다.
cd /etc/letsencrypt
이동 후 하위의 디렉토리들을 확인하고, 하위 디렉토리중
인증서 정보, 설정 정보, 갱신정보가 있는
“archarchive”, “live”, “renewal”, “renewal-hooks” 를 복사합니다.
이때, 특정 도메인만 하겠다고 하면 해당 도메인 인증서만 복사합니다.
두번째로 기존 인증서에 사용하는 계정정보(account)를 확인해 둡니다.
이 부분이 중요한데, 다른서버에서 계정정보가 다르기 때문에 타겟 서버에 이동후 인증서 파일정보에 있는 계정을 타켓서버에 맞게 변경을 해줘야 합니다.
타겟서버에서도 letsencrypt의 인증서 계정정보를 확인합니다.
ls /etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org/directory/
위와 같이 하거나, 타겟서버에서 생성된 인증서가 있다면 해당 인증서의 설정 파일을 열어 확인해도 됩니다.
복사한 원본 letsencrypt 인증서를 타겟서버에 복사합다.
마지막으로 복사한 인증서 정보에서 account 를 변경해 줍니다.
sed -i ‘s/old계정/new계정/’ /etc/letsencrypt/renewal/*