본문 바로가기
Linux/debian/ubuntu

Let's encrypt 를 이용하여 Nginx 서버에서 무료로 https 설정하기

by wansdream 2016. 12. 14.



- Let's Encrypt 를 이용하여 무료로 인증서를 만들고 적용하는 방법을 소개합니다.

현재 서버 환경은 Ubuntu 14.04 & NGINX 환경으로 Let's Encrypt 에서 무료로 SSL인증서를 발급할 수 있다고 하여

적용하는 방법 노트


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 포트 443 포트 모두 열려 있어야 합니다. 방화벽을 확인해주시기 바랍니다.


- Let's Encrypt 이용하기

일단 letsencrypt 를 이용하기 위하여 해당 디렉토리로 이동합니다.

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

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

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

$sudo ./letsencrypt-auto certonly --standalone

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

그리고, 이용약관에 동의(< Agree >)하시면 됩니다.

이제 다음 화면에서 도메인을 입력하시면 되는데, 와일드카드(*)는 지원하지 않으며,필요한 도메인을 모두 적어야 합니다. 
각 도메인은 콤마(,) 또는 띄어쓰기를 이용하여 구분하여 입력하시면 됩니다.
모두 입력하시고 < OK > 를 누르면 정상적으로 완료되었다는 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 파일을 수정하도록 합니다. 
예를 들어 아래 경로에 위치하는 vHost파일을 수정한다고 가정하면,

/etc/nginx/sites-available/example

파일을 열어서 아래와 같이 수정합니다.

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;

}



$sudo service nginx restart



이제 브라우저에서 https://도메인 으로 접속해보자 ^^


위의 인증서는 90일로 인증기간이 매우 짧습니다. 90일 이전에 잊지말고 인증서 갱신해야 한다.





댓글