카테고리 없음

[nginx] certbot NGINX SSL 인증서 설정 및 자동 갱신(HTTPS) VER. CENTOS

밍글링글링 2023. 4. 5.
728x90

기존에 블로그에 certbot 내용을 올렸지만, 그 내용은 oracle linux 위주의 내용이였기 떄문에,

centos 버전으로 또 올릴까 합니다.

 

우선, 도메인이 있다는 가정을 하고, centos7 환경에서 할 것입니다.

centos7 이상이면 모두 작동될 것입니다.

 

SSL 적용
# EPEL 설치
yum install epel-release 

# CERTBOT 설치
yum install certbot 

# NGINX 호환 모듈 설치
yum install python-certbot-nginx

위 명령어 중에....

yum install python-certbot-nginx

해당 명령어가 안먹히는 경우, yum install python3-certbot-nginx을 붙여서 하시길 바랍니다.

 

필자의 같은 경우는 반대로 했는데, 'yum install python3-certbot-nginx'의 패키지를 찾을 수 없어서 'yum install python-certbot-nginx' 명령어로 호환 모듈을 설치하였습니다.

 

sudo certbot --nginx

위 명렁어를 사용하면, conf.d 디렉토리에 *.conf 파일로 존재하면 모두 읽어서 자동으로 수정되는 듯하다.

 

아래와 같이 미리 코드를 작성해놓아야 적용이되는데...

# Sample Config
server {
        listen       80 ;
        listen       [::]:80 ;
        server_name  admin.dev.kr;

        location / {
            proxy_pass https://proxy_webserver;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
}

출처: https://nasn.tistory.com/111

위 코드에서  80포트로 미리 선언되어야하고, 443포트를 미리 작성해놓으면, 충돌날 가능성이 있다.

 

기본
# certbot --nginx -d [Domain Name] --no-eff-email --agree-tos -m [Admin Email]
certbot --nginx -d mingty.com --no-eff-email --agree-tos -m test@test.com
  • --agree-tos : 각종 체크 항목 전체 승인
  • --no-eff-email : Let's Encrypt 이메일을 받지 않음
  • -m : 관리자 이메일 지정

 

STANDALONE
# certbot certonly --standalone -d [Domain Name] --no-eff-email --agree-tos -m [Admin Email]
certbot certonly --standalone -d mingty.com --no-eff-email --agree-tos -m test@test.com

위 명령어는 NGINX 서비스를 이용해서 발급하는 것이다. 그리하여 nginx 서비스를 내리고 실행하여야하고 .conf 파일 안에 443포트의 내용들이 자동으로 생성되지 않는다.

편한 것은 [기본] 으로 하는 것이 더욱 편할 것이다.

 

그리하여...필자는 [기본]으로 하였다.

 

server {
        server_name mingty.com;

        location / {
                proxy_pass http://127.0.0.1:12022;
        }


    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mingty.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mingty.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = turnkeyspace.co.kr) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

        listen 80;
        server_name turnkeyspace.co.kr;
    	return 404; # managed by Certbot
}

위와 같이 자동으로 생성되었다....

 

자동갱신

 

갱신 테스트

certbot renew --dry-run

 

갱신 명령

certbot renew --pre-hook "nginx -s stop" --post-hook "nginx"

 

crontab 스케쥴러 설정

# Crontab config 편집기 실행
sudo crontab -e 

# 아래 명령어 추가
# 매월 1일 00:00 실행 설정
0 0 1 * * /usr/local/bin/certbot renew --pre-hook "nginx -s stop" --post-hook "nginx"

 

위와 같이 설정하면, 자동 갱신까지 완료된다.

728x90

댓글