ssl 적용 - webroot방식(with nginx)
환경
OS : CentOS7
WebServer : Nginx
사용법
- 사용할 webroot 폴더를 만들어 주고 html파일을 넣어준다 (예제는 test)
예제처럼 도메인에 맞춰 폴더를 만들어주면 좋을듯
$ mkdir /opt/test
$ nano /opt/test/index.html
- /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;
}
}
- Certbot 설치
https://certbot.eff.org/ 홈페이지에서 각자 맞는 환경 선택
여기선 centos에 nginx로 진행
$ yum install certbot python-certbot-nginx
- 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파일을 변경시켜주는것 같다.
- /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
29server {
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)포트는 생성된 키를 매칭시켜주면 된다.
nginx reload
$ systemctl reload nginx
TEST
test.com 나 www.test.com로 접속해본다
https로 rewrite되고 정상적으로 인증이 되는지 확인
- 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 //발급된 인증서 목록 확인 명령어