Programing/Let's Encrypt

Certbot, 2024년 Windows 베타 지원 중단

기운씨 2024. 5. 27. 01:10

Intro

나는 2008년부터 유지해온 도메인 한개와 2023년부터 새롭게 추가한 도메인 한개로 총 2개의 도메인을 소유하고 있다.

이들 도메인을 통해 web, ftp 서버들을 운영중이며 해당 도메인들에 무료 인증서들을 설치하여 ssl 서비스를 제공하고 있었다.
그리고 무료 인증서는 Let's Encrypt 라는 인증 기관을 통해서 제공 받고 있다.

위 내용은 수년동안 잘 이용하던 무료 보안 서비스에 대한 개요의 시작이며
여기엔 Let's Encrypt, Certbot, Win-ACME 등의 키워드들이 등장한다.
그래서 프롤로그는 copilot 이 설명해준 위 키워드들에 대한 정의로 시작한다.
 

Prologue

ChatGPT 는 너무나 편리하다.
항상 내 옆에서 내가 필요로 하는 소소한 정보들을 자세하게 친절히 알려준다.
수년간 Let's Encrypt 를 통해 무료 인증서를 발급 받아 사용해 왔지만
발급받기 위해 사용한 certbot 이라는 프로그램조차 어디서 만들고 인증서를 어떤 경유로 받아오는지 알지 못했었다. ^^;
아래와 같이 copilot 이 정리해준 덕분에 내가 이용하는 프로그램의 특성도 쉽게 알 수 있었다.

Let’s Encrypt는 무료 SSL/TLS 인증서를 발급하는 인증 기관입니다. 
이때, Let’s Encrypt에서는 ACME(Automatic Certificate Management Environment) 프로토콜을 사용하여 지정된 도메인 이름을 제어하는지 확인하고 인증서를 발급합니다.

Certbot과 Win-ACME는 모두 ACME 프로토콜을 구현한 클라이언트 도구로, 이 도구들을 통해 사용자는 ACME를 지원하는 인증 기관에서 SSL/TLS 인증서를 쉽게 관리할 수 있습니다.

Certbot은 전자 프론티어 재단 (EFF)에서 개발한 무료 오픈 소스 도구로, SSL/TLS 인증서를 요청하거나 취소하는 데 사용됩니다. 
Certbot은 ACME 프로토콜을 사용하여 인증서를 발급받습니다. 
대부분의 경우 Certbot 클라이언트에서 시작할 것을 권장하며, 원하는 항목에 따라 간단히 인증서를 받거나 설치에도 도움이 될 수 있습니다.

Win-ACME는 Windows 환경에서 Let’s Encrypt 인증서를 쉽게 설치하고 관리할 수 있도록 도와주는 도구입니다. 
Win-ACME는 ACME 프로토콜을 구현하며, 이 도구를 통해 사용자는 Windows 서버에서 SSL/TLS 인증서를 쉽게 발급하고 관리할 수 있습니다.

따라서, Certbot과 Win-ACME는 모두 Let’s Encrypt와 같은 ACME를 지원하는 인증 기관에서 SSL/TLS 인증서를 발급받는 데 사용되는 도구입니다. 
이 두 도구는 각각 리눅스와 윈도우 환경에서 사용되며, 사용자의 요구에 따라 적절한 도구를 선택하여 사용할 수 있습니다.

 

인증서 갱신의 실패

그동안 무료 인증서를 발급 받으면서 3년여동안 사용한 프로그램은 certbot 이었다.
certbot 은 여러 os 환경을 지원해주는데 나는 관리 편이상 windows 환경을 선호하였기에 windows 버전의 certbot 을 애용하였고 이에 대한 배포 절차 문서까지 작성해서 인증서 관리를 매우 효율적으로 작업하였다.

초기에 구축했던 환경은 docker 를 이용한 linux 환경이었는데,
linux 에서 인증서 파일을 발급받아 windows 로 옮기는 번거로움과 가상 환경의 os 도 관리해야만 하는 관리 포인트의 복잡성이 너무나 불편해서 순수 windows 로만 관리하게끔 certbot 프로그램을 windows 용으로만 사용하고 있었다.

그런데 바로 어제 올해 2월에 발급받은 인증서가 만료됨에 따라서 새로운 인증서로 갱신하기 위해 문서를 열어 그동안 수없이 수행했던 절차를 진행했는데,
하루 꼬박 걸려 시도해봐도 좀처럼 새로운 인증서 갱신이 성공하지를 못했다.
그리고 오늘 오전에서야 그 원인을 알게 되었고, 그에 대한 기록을 이렇게 남겨놓는다.

사실 위와 같은 문제는 작년말 인증서를 갱신할때도 일시적인 장애로 동일한 문제를 겪었던 기억이 있는데,
단 며칠만에 정상화되길래 당시에 별다른 조치없이 그대로 현재까지 인증서 갱신 절차를 유지해왔었다.
하지만 어제 재발급 시도하면서 동일한 오류를 또 접하면서 이번 문제는 쉽게 해결될 수 없음을 직감하였다.

원인은 'Certbot, 2024년 Windows 베타 지원 중단' 때문이다.
내용은 Certbot Discontinuing Windows Beta Support in 2024 - Client dev - Let's Encrypt Community Support (letsencrypt.org) 문서에 나와 있다.

위와 같은 이유로 windows용 certbot 프로그램을 기존에 2.6 버전에서 2.9 버전으로까지 변경하며 인증서 갱신을 다시 시도해 봤지만 또다시 실패하였고 지금은 포기한 상태다.

크게 의미는 없지만 windows 용 certbot 프로그램의 마지막 버전은 다음의 경로에서 받을 수 있다.
-> Certbot - Browse /v2.9.0 at SourceForge.net

인증서 발급시 내가 겪은 오류는 dns txt record 변경을 통해 let's encrypt 의 dns challenges 를 시도시 failed 하는 오류였다.
이것은 나의 도메인을 호스팅하는 업체에 연결된 name server 와 전세계 dns 서버들에 저장된 txt record 값이 설정한 값과 일치하지 않아 발생하는 오류이다.
dig나 nslookup 으로는 정상적으로 출력되나 certbot 에서 엔터키를 입력한 순간엔 부정한 값으로 failed 되버리는 것이다.

원인은 알지만 해결책은... 쉽지 않다.
도메인 서버와 네임 서버 그리고 dns 서버까지 이들이 가진 데이터를 한번에 통일시키기 보다는 다른 방법을 찾는게 손쉬울 것 같다. (하루를 기다려도 모든 dns 서버들이 변경한 record 값을 가지지 못한다)
그래서 오류에 대한 구글링의 정보들을 살펴보았다.
수많은 문서들 중에 두개의 문서 정도가 잘 정제된 내용으로 보였다.

물론 그렇다고해서 위 문서들로 해결책을 찾은 것은 아니다.
왜냐하면 나는 도메인을 구매한 회사와 내 도메인의 포워딩 정보를 관리하는 회사가 다르기 때문에 이들을 통해 문제를 해결한다는 것은 매우 난해한 문제를 가지고 있다.

그래서 결과적으로는 dns 의 txt record 수정이 필요한 와일드카드(wildcard) 도메인 인증서를 포기하기로 최종 결정하였다.

win-acme 의 사용

와일드카드(wildcard) 인증서를 포기하기 전까지만 해도 나는 혹시 certbot 이 아닌 win-acme 로 발급 시도하면 어떨까?
혹시 성공할까? 기대를 했었다.
하지만 검색으로 찾아낸 여럿 문서들은 하나같이 내가 아는 수준에서의 발급 절차만 기재되었을뿐 별다른 추가 내용을 찾을 수 없었고
당연하게도 동일한 절차에서는 win-acme 로도 와일드카드(wildcard) 인증서는 동일한 오류로 인해 발급 받을 수 없었다.

메인 도메인과 서브 도메인들에 대해 각각 적용될 인증서를 발급 받는다면 와일드카드(wildcard) 도메인 인증서가 필요하지 않다.
나는 두개의 도메인을 소유하고 있고 서브 도메인은 세개가 있으므로 총 5개의 도메인에 대해서만 인증서를 발급받으면 된다.
갯수가 얼마 안되니 굳이 와일드카드(wildcard) 인증서에 연연하지 않아도 되었던 것이었다.

Epilogue

그렇게 인증서 발급 프로그램과 운영 정책을 바꾸면서 나는 이제 행복해졌다.
내 기억엔 2년전에 처음 dns txt record 오류를 만났을때 장장 보름을 고생했던 기억이 있다.
그때의 작업으로 인증서 발급 절차까지 수립하면서 2년을 무사고로 잘 보냈었는데...

이번에 certbot 의 windows 지원 종료와 dns txt record 오류의 재발은 또다시 나에게 3일간의 고통과 절망의 시간을 안겨 주었으며
그것으로 깨달은 점은 누군가와의 논쟁에서 정론을 논하게 되면 서로 합의하기가 너무나 어렵고 그로 인한 손실이 막대하다는 것이다.
하지만 서로가 조금씩 반걸음을 후퇴하여 양보를 통해 합의점을 찾게 되면 불가능한 일도 가능하게 된다.

과거 이전 회사에서 아무런 권한도 없이 그저 메신저 역할로써만 다양한 사람들간의 분쟁을 조정해주는 업무를 수행하며 당시에 참 곤욕스러웠던 일들을 상기해보면,
내가 상대하는 사람들이 가진 서로간의 이기심들을 알면서도 모른척하며 어떻게든 사람들을 조율 하는 것이 참 어려운 일이었구나... 라고 회상하게 되었다.
당시 나의 역할에 대한 한계를 더 상위의 누군가에게 종용 할수만 있었다면 아마 조율 업무 자체도 할만 했었을지도 모른다...
그래서 그들을 관찰하며 부서장들간의 보이지 않는 업무 협력 관계가 참 중요하다는 것을 알게 되었다.
당시의 업무는 권한과 책임을 모두 갖추었어야만 무사히(?) 진행이 가능했는데
정작 그것을 갖춰야만 했던 사람들이 제대로 자기 역할을 못했던 것 같다.