YUDA't

얼마 전 Let's Encrypt로부터 <Action required: Let's Encrypt certificate renewals>라는 제목의 메일이 왔다.


Action may be required to prevent your Let's Encrypt certificate renewals from

breaking.


If you already received a similar e-mail, this one contains updated information.


Your Let's Encrypt client used ACME TLS-SNI-01 domain validation to issue a

certificate in the past 7 days. Below is a list of names and IP addresses

validated (max of one per account):


www.my-domain.com (11.222.333.444) on 2019-03-07


TLS-SNI-01 validation is reaching end-of-life. It will stop working

permanently on March 13th, 2019. Any certificates issued before then will

continue to work for 90 days after their issuance date.


You need to update your ACME client to use an alternative validation method

(HTTP-01, DNS-01 or TLS-ALPN-01) before this date or your certificate renewals

will break and existing certificates will start to expire.


Our staging environment already has TLS-SNI-01 disabled, so if you'd like to

test whether your system will work after March 13, you can run against

staging: https://letsencrypt.org/docs/staging-environment/


If you're a Certbot user, you can find more information here:

https://community.letsencrypt.org/t/how-to-stop-using-tls-sni-01-with-certbot/83210


[후략]


요약하자면 Let's Encrypt가 사용하던 도메인 인증 방식 중 TLS-SNI-01가 2019년 3월 13일부터 사용되지 않는다는 것. 근데 내 도메인이 그 방식을 사용하고 있으니 빨리 바꾸란 거다.

그때까지 다른 인증 방식(HTTP-01, DNS-01 or TLS-ALPN-01)으로 바꾸지 않으면 인증서 갱신이 안 먹히고 기존의 인증서들이 파기된다고 한다.


나는 nginx에서 certbot으로 인증서를 자동 발급/갱신하게 했는데 친절하게도 certbot 유저를 위한 가이드도 제시해주었다.

"How to stop using TLS-SNI-01 with Certbot"에서 알려준 바에 따르면,


1) certbot 버전이 0.28 이상인지 확인한다. 

$ certbot --version || /path/to/certbot-auto --version

만약 그 미만의 버전이라면 업데이트 해주어야 한다. 난 certbot 버전이 0.22여서 업데이트 해주었다. 참고로 ubuntu 16은 0.28이 최신 버전인듯 하다.

$ sudo apt-get update
$ sudo apt-get install --only-upgrade certbot


2) 갱신 설정에서 TLS-SNI-01 관련 레퍼런스들을 전부 지운다.

$ sudo sh -c "sed -i.bak -e 's/^\(pref_challs.*\)tls-sni-01\(.*\)/\1http-01\2/g' /etc/letsencrypt/renewal/*; rm -f /etc/letsencrypt/renewal/*.bak"


3) 갱신을 --dry-run으로 돌려본다.

$ sudo certbot renew --dry-run

--dry-run 옵션을 붙이면 실제로 인증서를 갱신하지 않고도 시뮬레이션을 돌려볼 수 있다.

이전의 certbot이 기본 인증 방식으로 TLS-SNI-01를 사용했다면 새로운 버전은 HTTP-01을 사용한다. 별다른 설정을 하지 않았다면 HTTP-01로 자동갱신될 것이다.




+ Let's Encrypt 측에서 TLS-SNI-01를 더 이상 지원하지 않는 이유는 보안상의 취약점 때문이라 한다. 프로토콜을 사용하여 인증서를 하이잭 할 수 있다는 것을 발견했다고. 


+ 다른 문서에서는, TLS-SNI-01가 self-signed certificate로 인증하는 방식인데 이건 테스트나 임시용으로 쓰는 인증서이지 프로덕션 단계에서는 사용하면 안 된다고 한다.


+ 구글링하면 전세계 친구들의 멘붕을 느낄 수 있다!



참고:

Let's Encrypt disables TLS-SNI-01 validation

How to stop using TLS-SNI-01 with Certbot

Self-Signed Certificate Generator