[Blog] 개발블로그에 SSL 적용하기
무료 Lets Encrypt를 사용하여 개발 블로그에 SSL을 적용하는 간단한 방법을 설명합니다.
개발블로그는 주로 개인 작업용이어서 SSL 적용을 하지 않기로 결심했었는데, 아무래도 찝찝해서 결국 SSL 을 적용하기로 하였다.
도메인 자체가 Route53 에서 구매했기 때문에 가장 간단한 방법은 ELB 에 SSL 을 적용하는 것이지만, ELB 를 사용하는 순간 개인블로그에 매달 필요치 않게 돈을 지출하게 될 것 같았다. (배보다 배꼽이 더 큰 경우)
무료로 이용할 수 있는 Lets Encrypt 를 사용해서 간단히 적용시키기로 하였다.
1. Lets Encrypt 에서 권고하는 대로, certbot 을 설치한다. (nginx 와 같이 사용할 것이기 때문에, nginx 플러그인도 같이 설치한다.)
sudo yum install certbot certbot-nginx
2. certbot 을 통해서 SSL 인증서를 발급한다. 이 과정을 거치면, 인증서가 발급된다.
sudo certbot --nginx -d my.domain.com --email myemail@gmail.com --agree-tos
3.nginx 설정 파일에 SSL 적용되도록 수정한다.
server {
    proxy_buffer_size   128k;
    proxy_buffers   4 256k;
    proxy_busy_buffers_size   256k;
    server_name  kim.heejae.info;
    location / {
        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 Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://00.00.00.00:8080;
    }
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/my.domain.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/my.domain.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
    if ($host = my.domain.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
    listen       80;
    server_name  kim.heejae.info;
    return 404; # managed by Certbot
}
4.주기적으로 자동으로 인증서 갱신되게 설정한다
Lets Encrypt 의 경우, 3개월이 지나면 SSL 인증서를 갱신해 주어야 한다. crontab 설정을 통해 간단히 SSL 을 재발급 받을 수 있고, 웹서버를 자동으로 재기동까지 해주면 된다.
3개월이 도래할 무렵에 인증서를 갱신해 주면 되지만, 일단 매달 인증서 갱신 시도하게 설정해 두었다. 
0 0 1 * * certbot renew --renew-hook "systemctl restart nginx"
(기타) 도커로 마이그레이션할 경우
블로그 1.0 (Spring Boot) 를 운영했을 때에는 ECS(Docker Container) 에서 서버를 운영하다가, Nest 로 블로그 2.0 을 재구축 하면서 EC2 로 운영하고 있다. 추후에 1.0때처럼 도커로 블로거를 운영했을 때에는 어떻게 SSL 적용해야 하는지 고민해 볼 필요 있음.
(아마 nginx conf 파일만 도커 컨테이너 안에 잘 적용시켜주면 되지 않을까 싶음. SSL 인증서는 중요한 정보이기 때문에, 물리 서버에 직접 저장)
이것도 읽어보세요