ssl 적용- webroot방식(with nginx)

ssl 적용 - webroot방식(with nginx)

환경

OS : CentOS7

WebServer : Nginx

사용법

  1. 사용할 webroot 폴더를 만들어 주고 html파일을 넣어준다 (예제는 test)

예제처럼 도메인에 맞춰 폴더를 만들어주면 좋을듯

$ mkdir /opt/test 

$ nano /opt/test/index.html
  1. /etc/nginx/conf.d 에 test.conf파일을 만들어 준다.

www. 같은 도메인은 server_name에 엔터단위로 구분

location에 webroot와 실행시킬 html파일 입력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#
# The default server
#
server {
listen 80;
server_name test.com www.test.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /opt/test;
index index.html;
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
}

  1. Certbot 설치

https://certbot.eff.org/ 홈페이지에서 각자 맞는 환경 선택

여기선 centos에 nginx로 진행

$ yum install certbot python-certbot-nginx
  1. centos에 명령어를 입력해준다.

test.com 뿐만아니라 www.test.com도 인증서를 적용시키기 위해 다음과 같은 옵션 추가

-d test.com -d www.test.com

$ certbot --webroot --installer nginx -w /opt/test -d test.com -d www.test.com

redirect 옵션을 선택하면 자동으로 conf파일을 변경시켜주는것 같다.

  1. /etc/nginx/conf.d에 test.conf
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    server {
    if ($host = www.test.com) {
    return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = test.com) {
    return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    server_name test.com www.test.com;
    return 301 https://$host$request_uri;
    }
    srver {
    listen 443 ssl;
    server_name test.com www.test.com;
    ssl_certificate /etc/letsencrypt/live/test/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/test1/privkey.pem; # managed by Certbot
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    location / {
    root /opt/test;
    index index.html;
    try_files $uri$args $uri$args/ $uri $uri/ /index.html =404;
    }
    }

자동으로 변경안되면 위에처럼 http는 https로 리턴시켜죽로 443(ssl)포트는 생성된 키를 매칭시켜주면 된다.

  1. nginx reload

    $ systemctl reload nginx

  2. TEST

test.com 나 www.test.com로 접속해본다

https로 rewrite되고 정상적으로 인증이 되는지 확인

  1. Renew certificate with cron

Let’s Encrypt SSL인증서는 90일마다 갱신해줘야 한다.

$ /opt/certbot/certbot-auto renew --dry-run
or
$ certbot renew --dry-run

$ cerbot renew --force-renewal

–dry-run 옵션을 이용하여 잘동작하는지 확인할 수 있다.

–force-renewal 명령어를 이용하면 남은기간에 상관없이 갱신 받을 수 있다.

갱신하는 방법은 한줄로 가능하지만 크론탭을 이용하여 자동적으로 갱신되도록 하는게 좋다.

크론탭을 수정하려면 -e옵션을 사용하고 작성된 크론탭을 보려면 -l옵션을 이용한다

$ crontab -e

0 18 1 */1 * /opt/certbot/certbot-auto renew --dry-run

$ crontab -l

매달 1일 18시에 갱신을 하는 크론탭을 작성하고 -l 옵션을 이용해 확인한다.

$ certbot certificates //발급된 인증서 목록 확인 명령어