관리 메뉴

IT창고

Linux - Nginx SSL 적용 본문

보안/Web

Linux - Nginx SSL 적용

방구석여포 2019. 9. 8. 18:26

Nginx 웹 서버에 SSL을 적용해보도록 하겠습니다.

SSL을 적용하되 기본https(443)포트가 아닌 다른 포트를 지정하여 SSL적용을 하고 http(80)로 접속 시 SSL이 적용된 https로 Redirect 되도록 설정해보도록 하겠습니다.


테스트용도 이므로 ssl은 openssl로 사용하도록 하겠습니다. 그 외에 추천드리는 무료로 사용가능한 SSL for Free
(https://www.sslforfree.com)나 Let's Encrypt(https://letsencrypt.org/) 등이 있습니다.

 

테스트환경은 VMware에 CentOS 7 OS이며 Nginx 웹 서버가 설치되어있는 상태로 진행합니다.
Nginx 설치는2019/02/16 - [서버운영/WAS, DBMS] - CentOS 7 - Nginx 설치를 참고합니다.

 

진행 전 기본적으로 yum update 진행해주시고 CentOS 7으로 진행하신다면 기본적으로 OpenSSL이 이미 설치되어있으므로 yum에서 mod_ssl 패키지를 받아줍니다. (만약 없다면 OpenSSL도 받아줍니다.)

위의 사진과 같이 yum으로 패키지를 다운받습니다.

사실 openssl로 사설인증서를 만드는건 Apache 웹서버에서도 한번 진행했던 내용이라 이번 글에서는 OpenSSL에 대한 설명은 간단히 넘어가도록 하겠습니다.

2018/07/30 - [서버운영/Linux] - 리눅스 웹 서버(Apache) 사설인증서 적용

 

우선 개인키를 만들고 만든 개인키를 이용하여 새 인증서를 발급 합니다. 

순서대로 국가코드. 도시이름 등을 입력해주면 됩니다.

자체서명키까지 만들어주고 위의 사진과 같이 pki 디렉토리에 위치하는 곳에 넣어주었습니다. 

 

이제 SSL에 필요한 준비물이 모두 있으므로 nginx 설정파일에서 SSL 적용을 해보도록 하겠습니다.

nginx 웹서버의 디렉토리 위치는 yum패키지로 설치된 Nginx 기본 위치로 테스트를 진행합니다.

yum패키지로 설치된 nginx 디렉토리 위치는 기본적으로 /etc/nginx 입니다. 

우선 nignx.conf 설정파일을 확인해보면 /etc/nginx/mine.types 파일과 conf.d 디렉토리 안에있는 모든 .conf 확장자 파일을 include되도록 설정되어있음을 알수있는데 /etc/nginx/conf.d/default.conf 파일 안에 내용을 확인해보도록 하겠습니다.

default.conf 파일안에는 포트를 설정할수있으며 SSL을 적용해보도록 하겠습니다. 

테스트 내용은 http(80)로 접속하면 https SSL이 적용된 페이지로 Redirect 되는것 입니다.

위의 사진과 같이 80번 포트로 접근할 경우 return 301 값에 이동할 URL을 입력해주고 실제 웹 페이지로 사용될 곳에 listen 포트 옆에 ssl을 붙여두고 ssl_certificate 및 _key 에 키파일과 서명키 경로를 설정 합니다. 

여기까지 Nginx SSL 적용 및 Redirect 내용이며 SSL 적용에 크게 어려운 점은 없고 여기에 Redirect 내용만 추가되었습니다.

 

이제 실제 동작이 되는지 테스트 해보도록 하겠습니다. 

실제 동작이 되는지 확인 전에 nginx 서비스(데몬)을 재시작 해주도록 하며 리눅스 방화벽을 끄거나 443번 이외에 설정한 포트 번호를 설정해줘야 합니다. 저는 nginx 서비스를 재시작하고 방화벽은 끄고 테스트를 진행하도록 하겠습니다.

(ex. service nginx restart , service filewalld stop)

 

테스트 결과 http://localhost(ex. 100.100.100.1, 본인의 리눅스 서버 ip)로 접속하게 되면 https://localhost:81로 이동하게 되는걸 확인할 수 있으며 Nginx Server에 SSL이 적용된걸 확인할 수 있습니다.

DNS서버를 구축하여 도메인을 사용하면  더욱 좋으며 포트를 분리하여 사용하는 이유중 하나로 보안 상 관리자 페이지와 일반 페이지를 구분하기 위해서 사용합니다.

Comments