80포트를 사용하지 못하는 상황에서 webroot방식으로 하면 443포트로 인증/갱신이 가능하다.
Standalone: 단순한 환경, 테스트 서버, 웹 서버가 없는 경우에 적합.서비스 중단이 발생할 수 있음.
Webroot: 프로덕션 웹 서버, 복잡한 웹 애플리케이션 환경에 적합
sudo apt update
sudo apt install certbot python3-certbot-nginx
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포트로 들어온 요청을 처리하여 해당 파일을 제공합니다.
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
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
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