관리 메뉴

튜토리얼북

Let's encrypt 를 이용하여 Nginx 서버에서 무료 HTTPS 지원하기 본문

Dev WEB /WAS Tips

Let's encrypt 를 이용하여 Nginx 서버에서 무료 HTTPS 지원하기

Dev 눈싹 2016.02.19 12:10


여기서는 간단하게 Let's Encrypt 를 이용하여 무료로 HTTPS 를 제공하는 튜토리얼을 진행해보겠습니다.

- 무료로 Let's Encrypt 를 이용한 인증서를 만들고 적용


 우선 이 문서는 영문 버전을 참고하여 작성한 문서이며 원본은 How To Secure Nginx with Let's Encrypt on Ubuntu 14.04 입니다. 기본적으로 원본 문서보다 설명이 적습니다. 자세한 사항은 원문을 찾아 보시기 바랍니다.


서버 셋팅환경은 Ubuntu NginX 입니다.


1. Let's Encrypt 설치하기


 우선 필요한 것들을 설치 하도록 합니다. 이미 설치되어 있다면 굳이 설치 하지 않으셔도 됩니다.


$sudo apt-get update
$sudo apt-get install git bc


이제 git 저장소에서 Let's Encrypt 을 다운받으시기 바랍니다.

$sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

/opt/letsencrypt 는 여러분이 원하시는 폴더로 지정하시면 됩니다. 



2. 인증서 가져오기


 이제 다운 받은 프로그램을 이용해 인증서를 가져올 차례 입니다. 인증서를 가져오기전 알아두셔야 할 사항으로 Let's Encrypt 의 인증 방식인 Standalone plugin 은 서버 인증을 위해서 80포트를 이용합니다. 따라서 nginx, apache 와 같이 80 포트를 이용하는 서비스가 있다면 서버를 일시적으로 멈춰 주시기 바랍니다.


- Standalone plugin 을 위하여 서버 정지해두기


$sudo service nginx stop

그리고 80포트를 이용하는 서비스가 있는 지 확인해보도록 합니다.

$netstat -na | grep '80.*LISTEN'

 위의 명령어로 80 포트를 어떤 서비스도 이용하지 않는 것을 확인하셨다면 이제 Standalone plugin 을 이용할 준비가 되신 것 입니다.


* 만약 80 포트를 사용하는 서비스가 있다면 아래와 같은 창을 보게 될것 입니다. 꼭 잠시 종료해 주시기 바랍니다.

* 80 포트 443 포트 모두 열려 있어야 합니다. 방화벽을 확인해주시기 바랍니다.




- Let's Encrypt 이용하기


일단 letsencrypt 를 이용하기 위하여 폴더로 이동합니다.


cd /opt/letsencrypt 혹은 설치된 디렉토리


그리고 standalone 명령어를 실행해주도록 합니다.


* 인증서생성은 관리자 권한을 필요로 합니다. 따라서 sudo su 를 이용하여 root 로 작업하시거나 앞쪽에 sudo 를 붙여 주시기 바랍니다.


$sudo ./letsencrypt-auto certonly --standalone


 위의 명령어를 실행하시면 실행을 위한 패키지가 설치된 후 아래와 같이 이메일을 작성하는 창을 보게 됩니다. 이메일은 긴급 통보나 잃어버린 키를 복구 하기 위해 사용되니 사용하시는 이메일을 적어 주시기 바랍니다.



그리고 이용약관에 동의 하여 주시기 바랍니다.  ( 원본은 창이 예쁘게 잘 나오는대... 저는 qqqq... )



이메일 등록이 완료 되었다면 아래와 같이 도메인을 작성하는 란이 나오게 됩니다. 와일드 카드는 지원하지 않으며 필요한 도메인을 모두 적어 주시기 바랍니다. 각 도메인의 구분은 ,(콤마) 혹은 띄어쓰기를 이용하여 구분해 주시면 됩니다.



이제 정상적으로 완료 되었다면 아래와 같이 Congratulations 라는 메세지와 함께 인증서가 생성된 것을 확인하실 수 있습니다.



 인증서 관련 파일은 /etc/letsencrypt/live/도메인/ 폴더에 생성되며 파일들은 아래와 같습니다.


cert.pem : 도메인 인증서

chain.pem : Let's Encrypt chain 인증서

fullchain.pem : cert.pem 과 chain 인증서 합본

privkey.pem : 개인키


NginX 서버에서 사용될 키체인은 fullchain.pem 과 privkey.pem 을 사용하게 될 것 입니다.


3. NginX 에 TLS/SSL 설정하기


 일단 NginX 가 설치되었다는 전제하에 vHost 파일을 수정하도록 합니다. 


$vim /etc/nginx/sites-available/example


example 은 vHost 파일을 말합니다. 운영중인 파일을 선택하여 아래와 같은 사항을 추가해 주도록 합니다.


        
        listen 443 ssl;

        server_name example.com www.example.com;

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

        location ~ /.well-known {
                allow all;
        }


 기본적으로 443 포트를 이용하도록 만들고 server_name 에 도메인을 셋팅합니다, 그리고 위에서 생성하였던 fullchain.pem 파일과 privkey.pem 파일은 셋팅해주도록 합니다.


 추가적으로 아래는 NginX 에서 80 포트로 들어온 HTTP 주소를 443 HTTPS 로 보내주는 설정입니다. 참고하시기 바랍니다.


server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

이제 모두 셋팅하셨으면 NginX 를 재시작하여주시고 https 가 정상적으로 작동되는지 확인하시면 됩니다.

$sudo service nginx restart


정상적으로 셋팅이 되었다면 아래와 같이 주소창에서 인증서가 적용된것을 확인하실수 있습니다.



 위의 인증서는 90일로 인증기간이 매우 짧습니다. 다음 포스팅은 90일 이전에 인증서를 자동으로 갱신하는 방법에 관해 포스팅하도록 하겠습니다.


즐거운 개발 되시기 바랍니다 :D




저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
0 Comments
댓글쓰기 폼