Let's Encrypt 인증서 설치하기(feat. Ubuntu 14.04, Nginx)

웹이 어느정도 개발되고 이제 고도화를 해야할 단계가 왔다.
그 중에 보안을 위해 Https를 도입하는 것이 우선시 되었는데, Https를 사용하기 위해서는 ssl 인증서가 필요했다.
ssl 인증서를 구입해서 쓰는 것 보다 언젠가 들어본 Let’s Encrypt를 쓰기로 했다.

Let’s Encrypt

Let's Encrypt

쉽게 말하자면 인증서를 무료로 제공하는 인증기관이다.
mozilla, cisco, facebook 등 후원하는 곳들도 많은 것을 보니 믿을만 할 것 같다.

사용 방법

저번에는 letsencrypt repository를 클론 받아서 사용했었는데, 이제 client가 나온 것 같았다.
홈페이지에서도 certbot이라는 클라이언트를 사용하는 것을 추천했다.
들어가보니 첫 페이지에서 Webserver와 OS를 선택하면 그에 맞는 설치 방법도 친절하게 알려줬다.

0. 환경

요즘 개인적으로 하고있는 프로젝트가 있는데 Https를 도입할 일이 있어서 그 서버에서 진행하기로 했다.
Azure, Ubuntu 14.04, Nginx
이런 조합이다.

1. Install

1
2
3
4
$ wget https://dl.eff.org/certbot-auto
$ chmod a+x certbot-auto

$ ./certbot-auto

2. 인증서 발급

1
$ ./certbot-auto certonly

어떤 방식으로 인증을 할거냐 물어보는데 Webserver(nginx)를 따로 사용하고 있으므로 1번을 선택한다.

letsencrypt_1

도메인 이름을 적으면됨

letsencrypt_2

webroot를 /var/www/ 로 설정하고

letsencrypt_3
letsencrypt_4

nginx conf 파일에 이렇게 추가해두었다.

1
2
3
location /.well-known {
root /var/www;
}

아래와 같은 메시지가 출력되면 성공한건데, /etc/letsencrypt 위치에 설치되어있다.

1
2
3
4
5
6
7
8
9
10
11
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/{domain}/fullchain.pem. Your cert will expire
on 2016-11-10. To obtain a new or tweaked version of this
certificate in the future, simply run certbot-auto again. To
non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

3. ssl 적용

nginx에 ssl config 파일을 작성한다.

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
server{
listen 443 ssl;
server_name {server name};

ssl_certificate /etc/letsencrypt/live/{domain}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{domain}/privkey.pem;


ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;

location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:3000;
}

}

dhparam 파일은 아래와 같은 코드로 생성했다.

1
openssl dhparam -out dhparam.pem 2048

4. 확인

nginx를 reload하고 브라우저에서 https로 접속한다.

1
$ service nginx reload

적용 된걸 확인할 수 있다.

letsencrypt_5

5. renew

Let’s encrypt의 (내가 생각하는)유일한 단점이 기간이 너무 짧다는 것이다.
발급이 성공하면 만료 날짜가 나오는데 3개월 후인가 그럴것이다.
다음 명령어로 리뉴얼을 할 수 있다.

1
$ ./certbot-auto renew

하지만 이것도 스크립트를 짜면 자동화 할 수 있다.
그건 리뉴얼할 시기가 다가오면 따로 정리하는 것으로 하자.(절대 귀찮아서가 아니다.)

그 외

찾아보니 무료로 인증서를 발급해주는 기관들이 조금 더 있었다.

Refer

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×