SSLMate를 통해 사이트에 SSL 적용

오늘로 사이트에 SSL을 적용하였고, 기존 HTTP 주소로 연결되는 요청은 모두 HTTPS 주소로 리다이렉팅한다. 그 과정에서 겪었던 몇 가지를 적어본다.

SSLMate

SSL에서 가장 중요한 것은 인증서certificate인데, 개인이 웹사이트에 사용하기 위한 인증서를 발급받기 위해 StartSSL1을 많이 이용하는 것 같다. 1년짜리 무료 인증서를 발급받을 수 있기 때문으로 보인다. 나는 Eric Mill의 글2에서 추천을 보고 SSLMate를 통해 발급받았다.

SSLMate – Secure your website the easy way.

회원 가입과 지급 정보를 입력한 이후로는 모든 과정이 sslmate 커맨드라인 툴로 이루어진다는 점이 제일 마음에 든다. OS X에서는 homebrew로 패키지를 설치할 수 있었다.

# 설치
$ homebrew install sslmate

# euler.kr 도메인의 인증서 발급
$ sslmate buy --approval=dns euler.kr

발급 과정에서 결제가 일어나고, 내가 해당 도메인을 소유하고 있는지를 확인하는 승인 절차도 진행된다. DNS 승인을 요청했기 때문에 친절하게 알려주는 CNAME 레코드를 자신의 DNS에 적용하면, 확인이 되는 데로 인증서와 개인 키private key가 다운로드된다. DNS 레코드의 변경이 적용되는데 시간이 걸리므로, 중단하더라도 확인이 되면 이메일로 알려준다.

서버에서 갱신 프로세스까지도 자동화할 수 있지만, 로컬 컴퓨터에서 발급받아 인증서와 개인 키를 서버에 복사해 사용하기로 했다. 자세한 절차에 대해서는 도움말에 잘 나와 있어 쉽게 따라 할 수 있다.3

nginx 설정

nginx.conf의 서버 항목에서 SSL을 활성화하고 인증서와 개인 키의 위치를 지정하고, SSL 포트(443)로 리스닝하도록 설정하면 완료된다.

# /usr/local/etc/nginx/nginx.conf (FreeBSD)
server {
    ssl         on;
    ssl_certificate /etc/sslmate/euler.kr.crt;
    ssl_certificate_key /etc/sslmate/euler.kr.key;

    listen      443 ssl;
    server_name euler.kr;

    ...
}

HTTP 요청을 HTTPS 주소로 리다이렉팅하기 (nginx)

HTTP 포트(80)로 리스닝하여 HTTPS 주소로 리다이렉팅 하는 서버 항목을 추가한다.4

server {
    listen      80;
    server_name euler.kr;
    return      301 https://$server_name$request_uri;
}