SSL 인증서 무료 받아 사용하기 - 자동 업데이트(인증서 자동 갱신)
무료로 3개월 사용할 수 있는 SSL 인증서 입니다.
아래 옵션에서 --manual 들어간것은 생성은 잘 되지만 자동 갱신이 안되기 때문에 없는 옵션을 사용해서 생성해야 자동 갱신이 됩니다.
# 1) 참고한 사이트
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/SSL-on-amazon-linux-2.html#letsencrypt
yum install -y certbot python2-certbot-apache
# 아래는 와일드카드 인증서 받는 법.
https://devlog.jwgo.kr/2019/04/16/get-ssl-cert-from-letsencrypt/
# 와일드카드 인증서 받는 방법.
https://hiseon.me/server/letsencrypt-wildcard-certificate/
# 아파치 인증서 적용방법.
https://hiseon.me/server/letsencrypt-ssl-certificate/
* 어떤 것이든 뭐라도 하나 더 붙으면 다른것이다.
초보자가 착각할 수 있는 부분인데. 또는 일반이거나. 앞에 www 붙은것과 아무것도 없는 도메인은 다른것이다.
의미 없는 0이 하나 더 붙은 천만원과 1억은 다른것이다.
* 웹서버에 추가해 준다.
SSLCertificateFile "/etc/letsencrypt/archive/도메인/cert1.pem"
SSLCertificateKeyFile "/etc/letsencrypt/archive/도메인/privkey1.pem"
SSLCertificateChainFile "/etc/letsencrypt/archive/도메인/fullchain1.pem"
● 인증서 받기
certbot -d 도메인 -d www.도메인
* 아파치 환경설정 방식
웹루트 방식은 404 나오지 않도록. 디렉토리 및 접근이 가능해야 되면 아래와 같은 방식으로도 받을 수 있습니다.
아래 명령 후 3가지 물어봤을 때 1번 아파치 웹서버 선택하면 됩니다.
certbot --register-unsafely-without-email certonly -d "pabburi.co.kr" -d "www.pabburi.co.kr"
1: Apache Web Server plugin (apache)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
● 와일드카드 인증서 받기
추가적인 비용이 들어가는 것이 아니라 무료 인증서 이기 때문에 큰 문제가 되지 않으면 도메인을 추가 할때 설정 필요 없는 와일드카드 방식을 사용 하곤 합니다.
네임서버에서 TXT 레코드로 _acme-challenge 추가해 줘야 합니다. - 네임서버를 통해서만 가능 합니다. -
와일드 카드이면 아래 처럼 두개 들어갑니다. 기본적인것 1개 그리고 * 들어간것 1개
- 아래는 자동갱신이 안됩니다. Route53 라이브러리가 있기는 하던데요. 꼭 필요하신분은 AWS 인증키 넣고 하는 방법 찾아 보시면 됩니다.
certbot --register-unsafely-without-email certonly --manual --preferred-challenges dns -d "*.도메인" -d "도메인"
● 확인하는 디렉토리
/etc/letsencrypt/archive/도메인
위처럼 디렉토리를 확인화여 간단하게 보거나 아래 명령으로 자세히 볼 수 있습니다.
아래 명령으로 나온 Certificate Name 이름으로 아래 revoke 해지명령의 옵션인 --cert-name 으로 사용 하면 됩니다.
certbot certificates
● 삭제
삭제만 되는것이지 초기화 되는 것은 아니다. 아래 명령을 내리면 해당 목록이 나오며 번호로 선택하여 삭제 할 수 있다.
certbot delete
● 해지명령
임의 파일을 삭제 하지 말고 이 명령을 사용 해야 합니다.
이름을 어떤것 넣어야 할지 남감할 텐데요. /etc/letsencrypt/renewal/ 이 안에 있는것을 넣으시면 됩니다. .conf 제외한것
certbot revoke --cert-name pabburi.co.kr
● 재계약하기
certbot renewal
● 웹루트 인증 방식(일반적으로 이 방식을 사용)
실행하는곳에 웹서버가 같이 있어야 합니다. 도메인에 대한 웹서버가 있어야 된다는 의미 입니다.
확인하려 들어 올때는 http 로 들어 옵니다.
즉, http 에도 설정이 되어 있어야 인식이 된다는 의미 인데요. 오류가 나면 보여주기 때문에 보면 http 임을 알 수 있습니다.
certbot --register-unsafely-without-email certonly --webroot --webroot-path /웹루트경로/public_html -d "도메인.co.kr" -d "도메인"
예를 들면 다음과 같이 실행하면 자동으로 받아집니다.
아래처럼 --manual 이 옵션이 들어가지 않아야 자동 갱신 됩니다.
certbot --register-unsafely-without-email certonly --webroot --webroot-path /home/pabburi/public_html -d "www.pabburi.co.kr" -d "pabburi.co.kr"
위처럼. 도메인이 2개 이상이 들어갔을때 어떤 도메인으로 디렉토리가 생성되느냐에 대한 문제가 있으니 필요시 반드시 확인이 필요하며 제 경우는 보통 앞쪽에 있는것으로 생성 되었습니다.
실패는 1간당 5회인데 자세한 것은 아래 사이트에서 확인이 가능 하다
https://letsencrypt.org/docs/rate-limits/
------------ 아래는 스케줄에 넣는것 ------------
39 1 * * * root certbot renew --no-self-upgrade
로그를 확인해 보니 실행이 안된것은 아니었다ㅣ
Jul 11 13:39:01 서버명 CROND[23216]: (root) CMD (root certbot renew --no-self-upgrade)
----- 아래는 갱신하면서 추가 사항 입니다. -----
결국은 갱신이 아니라 다시 받았습니다.
* 수동으로 인증 받기
--manual 옵션을 넣어줘야 인증키에 해당하는 것을 볼 수 있습니다.
더불어 갱신할때 오류가 발생하는데 인증서 받을때 어떤 방식으로 받았는지 적어 두는것이 좋습니다.
웹서버를 통한인증 이었는지 DNS 였는지 ... 3개월쯤 되어서 적어 둔게 없으면 어렵습니다.
아래 방식은 --manual 옵션으로 인해 자동으로 갱신이 안됩니다.
[root@pabburi /home/pabburi/public_html] certbot --register-unsafely-without-email --manual certonly -d "pabburi.com" -d "www.pabburi.com"
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Requesting a certificate for pabburi.com and www.pabburi.com
Performing the following challenges:
http-01 challenge for pabburi.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Create a file containing just this data:
1fm-gB1uVKeObMI0Xc6pyNO123xjZ6sJ_IFCR6fAghQ.dFpzsDiZz7CVojyxnC23_v9vhN2AZgEPlSrHxjfRIWI
And make it available on your web server at this URL:
http://pabburi.com/.well-known/acme-challenge/1fm-gB1uVKeOb234Xc6pyNOBAdxjZ6sJ_IFCR345ghQ
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
위와 같이 나오면 해당 위치에 파일을 생성해 주면 됩니다.
echo '1fm-gB1uVKeObMI0Xc6pyNO123xjZ6sJ_IFCR6fAghQ.dFpzsDiZz7CVojyxnC23_v9vhN2AZgEPlSrHxjfRIWI' > /home/pabburi/public_html/.well-known/acme-challenge/1fm-gB1uVKeOb234Xc6pyNOBAdxjZ6sJ_IFCR345ghQ
* 추가사항 - https 자동전환 설정 문제
https로 전환을 해야 되어 아파치 환경설정에서 Rewrite 룰을 설정해 놓았으면 위 http 인증 방식으로 문제가 된다.
이럴때는 아래를 추가하여 예외 디렉토리를 넣어 주면 해결이 된다.
RewriteRule ^/.well-known/acme-challenge/ - [L]
* 자동 연장을 할 때 아래와 같은 오류가 발생하는 이유는 생성할때 --manual 옵션을 주었기 때문입니다.
즉, 자동으로 갱신을 하기 위해선 이 옵션을 주면 안되고 웹루트 경로를 준다음 생성해야 됩니다.
Failed to renew certificate ohomall.co.kr with 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.',)
https://satisfactoryplace.tistory.com/309
https://joanne.tistory.com/271