개발/작업 기록용

[작업] 내 서버에 SSL 인증서 달기 -1 (Let's Encrypt, certbot, 가비아)

mabb 2025. 3. 23. 13:52
반응형

계획은 다음과 같다.

1. nginx로 80/443 서비스 포트를 오픈한다.(공유기 포트포워드 설정)

2. 80 포트는 443 포트로 포워딩하고

3. web1.javajava.co.kr , web2.javajava.co.kr 등으로 nginx에서 분기를 해줄 것이다. web1은 포트폴리오용, web2는 개인 개발 배포용으로 생각하고 있다.

4. 먼저 수동으로 ssl 적용을 할 것이다. 이때 ssl 수동 발급 절차를 면밀히 관찰 및 기록한다. 특히 가비아 웹 사이트에서 도메인 관리를 설정하는 부분은 WireShark 및 개발자 도구로 패킷과 쿠키 등을 잘 관찰 및 기록해 둔다.

5. 4의 과정을 자동화한다.

조사한 바에 의하면 Let's Encrypt라는 CA(인증 기관)를 통해 내 도메인의 인증서를 발급받을 수 있는데 이 때 certbot이라는 클라이언트 툴로 명령어를 입력하여 인증서를 발급 받을 수 있다. 명령어를 수행하면 내 서버에 인증서가 다운로드되니까 이를 이용하여 nginx나 tomcat 등에 적용해 주면 되는 것이다.

CA 입장에서는 도메인 소유자 등 도메인에 대한 관리 권한이 있는 사람에게만 인증서를 발급해주어야 한다. 그렇다면 어떻게 도메인의 관리 권한을 증명할 수 있을까?

 

도전 유형

Let’s Encrypt에서 인증서를 받으면 Google 서버는 ACME 표준에 정의된 대로 “도전"을 사용하여 해당 인증서의 도메인 이름을 제어하는지 확인합니다. 대부분의 경우 이 유효성 검사는 당신의 ACME 클

letsencrypt.org


HTTP-01 챌린지
DNS-01 챌린지

주로 사용하는 게 위의 두 가지인데 인증서를 발급받으려는 사람은 챌린지를 수행해서 도메인의 관리자임을 증명해야 인증서를 발급받을 수 있다. HTTP-01 챌린지를 통과하려면 웹서버 경로에 전달받은 특정 파일을 배치할 수 있어야 한다. 그 후 해당 경로에 대한 '요청'을 통해 검증을 받는 것이다. DNS-01 챌린지를 통과하려면 도메인의 TXT레코드에 값을 추가할 수 있어야 한다. 그 후 해당 도메인 TXT레코드에 대한 검증을 받는 것이다. 

여기서 문제가 되는 부분은 와일드카드 인증서이다. HTTP-01 챌린지로는 와일드카드 인증서를 발급받을 수 없다고 한다. DNS-01 챌린지를 통과해야만 와일드카드 인증서를 발급받을 수 있으므로 https://web1.javajava.co.kr , https://web2.javajava.co.kr를 사용할 수 있다. 

HTTP-01챌린지는 와일드 카드 인증서를 발급 할 수 없다.

TXT 레코드를 추가/삭제하는 API를 제공하는지 가비아에 문의를 남겨 놓고 답변을 기다리는 중이다. 위의 계획은 제공하는 API가 없을 것이라는 가정 하에 방법을 찾아보려는 시도이다.

API가 있으면 정말 좋겠다.

와일드카드 무료 인증서 갱신 방법을 찾는다면 편리해질 것이고 방법을 찾지 못하다면 3개월마다 인증서 갱신 작업을 해주어야 한다. 과연 와일드카드 인증서 자동 갱신을 해낼 수 있을까?  (다음 포스팅에서 계속)

 

 

반응형