https 세팅을 무료로 그리고 편하게 관리하기

https 세팅을 미루고 미루다 오늘에서야 모두 세팅을 마쳤다.
https 암호화 통신은 클라이언트 서버간 가장 기본적으로 적용해볼 수 있는 보안 방법이다.

최근에 https 프로토콜을 적용한 국내 서비스들이 많아 지고 있는데,
이는 구글 크롬 브라우저가 사이트의 https 프로토콜 적용을 기본 단계로 격상하면서 시작되었다고 볼 수 있다.

chrome secure

앞으로는 https 프로토콜이 기본으로 적용될 가능성이 높으나 http 프로토콜 대비 https는 많은 도메인 프로바이더들이 유료로 제공하는 경우가 많다. 아래 사이트들은 https 프로토콜을 무료로 적용할 수 있게 도와주는 사이트들이다.

다만, 이들이 가진 단점은 매 90일마다 certificate (인증서) 및 private key를 매번 같은 방법으로 다시 업데이트 해줘야 한다는 점(인증서 갱신)인데, 이를 renewal이라고 표현한다. 경험을 해본 사람들은 알겠지만 이게 생각보다 많이 불편한 프로세스인데 이를 auto-renewal 할 수 있는 방법이 있으니, 본 포스팅은 https 프로토콜의 보편화를 위해 auto-renewal의 방법을 설명하려 한다. 이 글에서 사용하는 환경은 아래와 같다.

우리의 목표는 아래와 같이 사이트의 https 프로토콜 적용이다.
jbear.co.secure

방법은 몇가지 있으나 여기서는 Linux 재단의 Collaboration 프로젝트 중 하나인 Let’s encrypt를 사용해볼 것이다. 일단은 아래 프로세스를 그대로 따라해보자.

1
2
3
4
5
6
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot python-certbot-nginx 

위의 프로세스는 Let’s encrypt 인증서를 shell 방식으로 업데이트하기 위한 certbot이라는 클라이언트 프로그램을 설치하기 위한 과정이다. 타이핑 후 설치하면 끝.

1
sudo certbot certonly -a webroot --webroot-path={웹서버의 origin root 폴더 위치} -d jbear.co(https 적용하기 위한 도메인 이름)

이제는 도메인 이름과 node.js간 리버스 프록시 역할을 하는 nginx 쪽 서버 세팅 후 nginx를 다시 시작해주기만 하면 끝이다. 아래는 jbear.co를 https화 할때 적용한 nginx 서버 config 값이다. /etc/nginx/conf.d/ 아래에 reverse proxy 세팅을 할 수 있도록 아래와 같이 적어주면 된다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
server {
    listen 80;
    listen 443; # 443번 포트가 https 프로토콜 포트임.
    
    ssl on;
    ssl_certificate {여기에 certificate 생성시 나온 fullchain.pem path를 넣어줌}
    ssl_certificate_key {여기에 certificate 생성시 나온 privkey.pem path를 넣어줌}
    server_name jbear.co # 도메인 이름을 넣어요.
    
    location / {
        proxy_pass http://localhost:5000; # 도메인 이름과 node.js port를 연결
        # ... blah blah
    }
}

그리고 sudo service nginx restart 면 마무리 된다.
간혹 오타 등 세팅 실수로 안되는 경우가 있는데, 이런 경우 디버깅은 nginx -t 를 쳐보면 어디에 오류가 있는지 알려주기 때문에 편리하다.

comments powered by Disqus