Back to Blog List
Let’s Encrypt SSL 인증서 발급 및 Nginx 적용
개인서버#Certbot#SSL#SSL 인증서#미니PC#미니피씨

Let’s Encrypt SSL 인증서 발급 및 Nginx 적용

By: Unknown Author2025년 11월 16일 11:05

✅ 개요

이 문서는 개인 서버(미니 PC)에 Let’s Encrypt를 사용하여 무료 와일드카드 SSL 인증서(*.jay-gemini.com)를 발급받고, Nginx 웹서버에 적용하는 전체 과정을 기록합니다. 이 과정을 통해 HTTP 프로토콜을 HTTPS로 전환하여 통신을 암호화하고 보안을 강화할 수 있습니다.


💡 사전 준비물

  • 개인 도메인: jay-gemini.com (Gabia)
  • 리눅스 서버: Ubuntu가 설치된 미니 PC
  • 웹서버: Nginx 설치 및 실행 중
  • DNS 제어판 접근 권한: 도메인의 TXT 레코드를 추가하기 위해 필요

🚀 발급 및 적용 절차

1단계: Certbot 설치

Certbot은 Let’s Encrypt 인증서를 자동으로 발급하고 갱신하는 데 사용되는 클라이언트입니다.
snap을 통해 설치하면 최신 버전을 유지하기 용이합니다.

# snapd 설치 및 업데이트
sudo apt update
sudo apt install snapd
sudo snap install core; sudo snap refresh core

# (선택) apt로 설치된 구버전 certbot 제거
sudo apt-get remove certbot

# snap으로 Certbot 설치
sudo snap install --classic certbot

# certbot 명령어 링크 생성
sudo ln -s /snap/bin/certbot /usr/bin/certbot

2단계: 와일드카드 인증서 발급 신청

와일드카드 인증서는 도메인 전체의 소유권을 증명해야 하므로, DNS 인증 방식을 사용해야 합니다.

  1. 아래 명령어를 실행하여 수동 DNS 인증을 시작합니다.Bash
    • -d 옵션으로 와일드카드 도메인과 기본 도메인을 모두 지정해주는 것이 좋습니다.
    sudo certbot certonly --manual --preferred-challenges=dns -d "*.jay-gemini.com" -d "jay-gemini.com"
  2. 명령어를 실행하면 터미널에 DNS TXT 레코드를 추가하라는 안내가 나타납니다.
    Please deploy a DNS TXT record under the name _acme-challenge.jay-gemini.com with the following value:

    [랜덤한 문자열이 여기에 표시됩니다]

    Before continuing, verify the record is deployed. Press Enter to Continue
  3. 가비아 DNS 관리툴에 접속하여 위에서 안내받은 값으로 TXT 레코드를 추가합니다.
    • 호스트명: _acme-challenge
    • 값/내용: 터미널에 표시된 랜덤한 문자열
    • 타입: TXT
  4. DNS 레코드가 전파될 때까지 1~2분 정도 기다린 후, 다시 터미널로 돌아와 Enter 키를 누릅니다. Certbot이 DNS를 확인하고 인증을 완료합니다. ✅ 성공! 인증서는 /etc/letsencrypt/live/jay-gemini.com/ 경로에 저장됩니다.

3단계: Nginx에 SSL 적용 및 HTTP 리디렉션

이제 발급받은 인증서를 Nginx에 설정하여 HTTPS를 활성화합니다.

  1. Nginx 설정 파일을 엽니다. (/etc/nginx/sites-available/default 또는 별도 설정 파일)
  2. 아래와 같이 listen 80 블록(HTTP)은 listen 443 블록(HTTPS)으로 리디렉션하도록 수정하고, 443 블록에 SSL 설정을 추가합니다.
Nginx

# =============================================================
# 1. 메인 프론트엔드 (jay-gemini.com)
# =============================================================

# HTTP (80) 접속을 HTTPS (443)으로 리디렉션
server {
    listen 80;
    server_name jay-gemini.com www.jay-gemini.com;
    return 301 https://$host$request_uri;
}

# HTTPS (443) SSL 서버
server {
    listen 443 ssl;
    server_name jay-gemini.com www.jay-gemini.com;

    # SSL 인증서 경로
    ssl_certificate /etc/letsencrypt/live/jay-gemini.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/jay-gemini.com/privkey.pem;

    # ... 기존 프록시 설정 등 ...
}


# =============================================================
# 2. 백엔드 API 및 Jenkins 등 서브도메인
# =============================================================

# jenkins.jay-gemini.com의 HTTP 리디렉션
server {
    listen 80;
    server_name jenkins.jay-gemini.com;
    return 301 https://$host$request_uri;
}

# jenkins.jay-gemini.com의 HTTPS SSL 서버
server {
    listen 443 ssl;
    server_name jenkins.jay-gemini.com;

    # 동일한 와일드카드 인증서 사용
    ssl_certificate /etc/letsencrypt/live/jay-gemini.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/jay-gemini.com/privkey.pem;

    # ... 기존 Jenkins 프록시 설정 등 ...
}

4단계: 설정 확인 및 Nginx 재시작

  1. 설정 파일의 문법 오류를 확인합니다.
    sudo nginx -t
  2. 테스트가 성공하면 Nginx를 재시작하여 설정을 적용합니다.
    sudo systemctl restart nginx

🚨 중요: 수동 갱신

이 가이드에서 사용한 --manual 방식은 자동 갱신이 불가능합니다. Let’s Encrypt 인증서는 90일마다 만료되므로, 만료되기 전(약 60~80일 주기)에 수동으로 갱신해야 합니다.

  1. 갱신 시점이 되면 아래 명령어를 실행합니다.
    sudo certbot renew --force-renewal
  2. 2단계에서와 마찬가지로, 화면에 나타나는 새로운 TXT 레코드 값을 DNS에 업데이트하고 인증을 완료해야 합니다. 현재 85일 주기로 설정완료.

Comments (0)

Leave a Reply

Or login to comment with your account.

Loading comments...