CentOS7 + nginx 에 Lets Encrypt 무료인증서 설치 & 설정

CentOS 에서 Let’s Encrypt 인증서를 받아서 nginx 서버에 적용시켜 봅시다~

YUM epel 저장소 추가

yum install epel-release

certbot 설치

CLI 로 인증서를 생성 및 관리할 수 있도록 해주는 프로그램이다.

yum install certbot

443 포트 방화벽 오픈

firewall-cmd --permanent --add-service=https
firewall-cmd --reload

nginx stop

–standalone 옵션으로 인증서 생성시 오류가 나기 때문에 잠깐 nginx 를 끈다.

service nginx stop

인증서 생성

certbot certonly --standalone -d 생성할 도메인

# ex
certbot certonly --standalone -d stove99.gihub.io

이메일 입력하라 그라고 이것저것 몇 번 묻는데 다 y 로 하면 된다.

작업이 성공적으로 끝나면 인증서는 /etc/letsencrypt/live/도메인명 에 생성된다.

nginx 설정

예를들어 stove99.github.io 로 인증서를 발급받았다고 가정함.

#http 로 접속할 경우 https 로 리다이렉트 시킴
server {
    listen       80;
    server_name  stove99.gihub.io;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name stove99.gihub.io;

    ssl_certificate /etc/letsencrypt/live/stove99.gihub.io/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/stove99.gihub.io/privkey.pem;

    location / {
        ...
    }
}

nginx start

service nginx start

인증서 갱신 처리

인증서 유효기간이 3개월이기 때문에 인증서를 한 달에 한번 정도 갱신하도록 crontab 에 등록시킨다.

crontab 에 등록하기전에 먼저 인증서 갱신시 nginx 가 리스타트 되도록 설정이 필요하다.

vi /etc/letsencrypt/renewal/stove99.gihub.io.conf

## [renewalparams] 섹션에 pre_hook, post_hook 설정 추가
[renewalparams]
...
...

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

...
...

crontab 에 갱신작업 등록

crontab -e

## 한달에 한번씩 인증서가 갱신되도록 작업 추가
0 0 1 * * /bin/bash -l -c 'certbot renew --quiet'