Let's encrypt ssl

코드깎는 노인·2024년 10월 2일
0

80포트를 사용하지 못하는 상황에서 webroot방식으로 하면 443포트로 인증/갱신이 가능하다.

Standalone: 단순한 환경, 테스트 서버, 웹 서버가 없는 경우에 적합.서비스 중단이 발생할 수 있음.

Webroot: 프로덕션 웹 서버, 복잡한 웹 애플리케이션 환경에 적합

1.Certbot 설치

sudo apt update
sudo apt install certbot python3-certbot-nginx

2. Nginx 설정 파일 준비

  • certbot이 80포트의 /.well-known/acme-challenge/경로로 파일을 생성하고 인증처리를 함에 따라 관련 설정을 추가한다다
sudo nano /etc/nginx/sites-available/greenhouse-farm.co.kr
sudo ln -s /etc/nginx/sites-available/greenhouse-farm.co.kr /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
// /etc/nginx/sites-available/greenhouse-farm.co.kr
server {
    listen 80;
    server_name greenhouse-farm.co.kr www.greenhouse-farm.co.kr api.greenhouse-farm.co.kr socket.greenhouse-farm.co.kr;

    location ^~ /.well-known/acme-challenge/ {
        default_type "text/plain";
        root /var/www/html;
    }
}

server {
    listen 443 ssl;
    server_name greenhouse-farm.co.kr www.greenhouse-farm.co.kr;

    ssl_certificate /etc/letsencrypt/live/greenhouse-farm.co.kr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/greenhouse-farm.co.kr/privkey.pem;

    # SSL 설정
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    
    location ^~ /.well-known/acme-challenge/ {
        allow all;
        root /var/www/html;
        try_files $uri =404;
    }
  • Certbot의 기본 동작:

    • Certbot은 기본적으로 80포트를 통해 HTTP-01 챌린지를 수행하려고 시도합니다.

    • 이는 Let's Encrypt 프로토콜의 표준 동작 방식입니다.

  • 80포트 우선:

    • 80포트에 해당 설정이 있으면, Certbot은 먼저 이 포트를 통해 인증을 시도합니다.

    • Let's Encrypt 서버는 HTTP(80포트)로 /.well-known/acme-challenge/ 경로에 접근을 시도합니다.

  • 443포트 백업:

    • 만약 80포트를 통한 인증이 실패하거나 접근할 수 없는 경우, 443포트의 설정이 백업 역할을 할 수 있습니다.

    • 하지만 이는 표준 동작이 아니며, 추가적인 설정이 필요할 수 있습니다.

  • 인증 프로세스:

    • Certbot이 /var/www/certbot/.well-known/acme-challenge/ 디렉토리에 임시 파일을 생성합니다.

    • Let's Encrypt 서버가 HTTP를 통해 이 파일에 접근을 시도합니다.

    • 웹 서버는 80포트로 들어온 요청을 처리하여 해당 파일을 제공합니다.

3. cerbot실행전 준비사항

디렉토리 권한 설정

  • 디렉토리를 생성하고, 웹 서버 사용자(일반적으로 www-data)에게 소유권을 부여하며, 적절한 권한을 설정한.
sudo mkdir -p /var/www/certbot/.well-known/acme-challenge
sudo chown -R www-data:www-data /var/www/certbot
sudo chmod -R 755 /var/www/certbot

포트포워딩

  • 80포트의 공유기 포트포워딩 설정

4. certbot 실행

  • 메인도메인 및 모든 서브도메인 입력
sudo certbot --nginx -d greenhouse-farm.co.kr -d www.greenhouse-farm.co.kr -d api.greenhouse-farm.co.kr -d socket.greenhouse-farm.co.kr 
  • 인증서 경로
ssl_certificate /etc/letsencrypt/live/greenhouse-farm.co.kr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/greenhouse-farm.co.kr/privkey.pem;
  • /etc/nginx/sites-available/greenhouse-farm.co.kr의 인증서경로 수정

  • nginx 재시작

sudo nginx -t
sudo systemctl restart nginx

5.자동갱신

Let's Encrypt 인증서는 90일마다 갱신해야 합니다. Certbot은 자동 갱신을 위한 cron job을 설정합니다. 이를 확인하려면 다음과 같다.webroot 방식을 사용해도 certbot.timer를 통한 자동 갱신은 정상적으로 작동한다.

sudo systemctl status certbot.timer
sudo systemctl list-timers | grep certbot

수동갱신

sudo certbot renew --dry-run
sudo certbot renew or sudo certbot renew --force-renewal
sudo systemctl restart nginx

인증서 갱신 정보

/etc/letsencrypt/renewal/your-domain.com.conf

인증서 위치 정보

sudo certbot certificates

profile
내가 볼려고 만든 블로그

0개의 댓글