SSL인증서로 NGINX에서 HTTPS 설정하기

2020. 10. 22. 19:59Nginx

환경 Ubuntu 16.04 (LTS) 이상의 환경에서 구성함

도메인 test.com 이 있다고 가정 

 

1. 저장소 설정과 업데이트를 진행

$ 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

 

2. Certbot설치

$ sudo apt-get install certbot python3-certbot-nginx

 

3. nginx 세팅

Certbot이 알아서 SSL를 세팅해주기 때문에

vi /etc/nginx/sites-available/ (사용 할 server block 이름) 작성

 

server {
       listen 80;
       server_name test.com (도메인 이름);
       location /{
               proxy_pass http://localhost:3000;
        }
}

 

작성을 한다.

설정이 완료 되면 저장하고 나와서  service nginx reload 으로 재시작

 

4. SSL인증 가져오기

$ sudo certbot --nginx -d test.com -d www.test.com   //  이런 식 으로 여러 도메인을 입력 할 수 있다. 

여기선 하나만 설정하기로 한다.

$ sudo certbot --nginx -d test.com

 

 

입력 후 이런 창이 뜨는데 인증서가 만료되기전 알림을 이메일로 받을 이메일을 작성하면된다.

Plugins selected: Authenticator nginx, Installer nginx 
Enter email address (used for urgent renewal and security notices) (Enter 'c' to 
cancel):

 

다음에 나오는것도 A를 입력하고 넘어간다

 

다음은 

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.

나오는데 개인 취향으로 하면 될 꺼같다.

 

다음으로 넘어가면 키가 생성이 완료가 된다.

 

1번, 2번 선택하는 창이 나오는데 2번을 선택하면 http로 접속이오면 자동으로 https로 접속 할 수 있도록 작성해준다

 

4. 인증서 자동갱신 설정확인

letsencrypt에선 90일만 유효하기 때문에 갱신을 해주어야 한다 매번 일일이 하지않게 certbot를 이용해 자동갱신한다 

설정이 되어있는지 확인하려면 

$ sudo certbot renew --dry-run

입력

에러가 뜨지않는다면 정상적으로 작동중이다.

 

5. openssl를 이용해 dhparam.pem키를 생성한다

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

입력 후   

ssl_dhparam "/etc/ssl/certs/dhparam.pem";  를

/etc/nginx/sites-available에 본인이 생성한 server block 에 넣어주면된다 

server {
       listen 443;
        ssl on;
        server_name test.com;
    	ssl_certificate /etc/letsencrypt/live/test.com/fullchain.pem; # managed by Certbot
    	ssl_certificate_key /etc/letsencrypt/live/test.com/privkey.pem; # managed by Certbot
		ssl_dhparam "/etc/ssl/certs/dhparam.pem";
 		ssl_session_cache shared:SSL:1m;
 		ssl_session_timeout 5m;

 		ssl_ciphers HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH;
 		ssl_prefer_server_ciphers on;
       location /{
               proxy_pass http://localhost:3000;
        }

}

 

/etc/nginx/sites-available에 본인이 생성한 server block에 키경로가 얼래 자동으로 설정이 되는데 때때로 안될때가 있으니 

들어가서 확인을 해야한다.

server {
       listen 443;
        ssl on;
        server_name test.com;
    	ssl_certificate /etc/letsencrypt/live/test.com/fullchain.pem; # managed by Certbot
    	ssl_certificate_key /etc/letsencrypt/live/test.com/privkey.pem; # managed by Certbot

 		ssl_session_cache shared:SSL:1m;
 		ssl_session_timeout 5m;

 		ssl_ciphers HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH;
 		ssl_prefer_server_ciphers on;
       location /{
               proxy_pass http://localhost:3000;
        }

}

ssl_certificate, ssl_certificate_key

두개가 설정이 안되있을때가 있다 확인해서 넣어주어야 한다.

ssl on;

ssl를 사용한다고 입력을 해줘야 한다. 

 

 

그럼 이제 보안연결이 된다.

 

 

참고:

 

twpower.github.io/44-set-free-https-by-using-letsencrypt

blog.lael.be/post/5107

728x90
반응형