
나는 http://도메인:8080/~~이 아니라 https://도메인/~~ 에 요청을 보내고 싶다!
웹 사이트를 HTTP로 운영하고 싶지만 사용자의 정보같은 민감한 정보를 사용하게 될 경우에는 SSL 인증서를 사용한 보안처리가 필수적이다.
웹 서버에 SSL 인증서를 사용해 HTTPS로 서비스를 제공할 수 있도록 Nginx 프록시 서버에 SSL 인증서를 적용하는 방법을 적어보고자 한다.
나는 Spring으로 서버를 배포하고 있으며 환경은 AWS Linux 2 AMI로 관리를 하고있다. 따라서 타 버전을 사용하고 있거나 이 문서를 먼저 확인한 경우 앞 포스팅들도 꼭 확인해 줬으면 한다.
HTTP를 HTTPS로 바꿔주는 과정에는 SSL 인증서가 필수적입니다.
SSL(Secure Socket Layer)은 프로토콜 중 하나로서 인터넷 상에서 주고 받는 데이터를 보호하기 위해 필요하다. 보통 SSL과HTTPS 는 같은 것이 아닐까라는 생각을 하지만 아니다. 아래 그림을 보면

SSL과 HTTP는 인터넷과 웹으로 나뉘는 것을 볼 수 있다. 인터넷은 컴퓨터를 통해 정보를 주고 받는 네트워크라고 볼 수 있고, 웹은 인터넷을 통해 사용가능한 서비스이며 마찬가지로 HTTPS도 SSL프로토콜 위에서 돌아가는 프로토콜이라는 것이다. [Web] SSL 인증서에 대한 이해(사전 지식, 정의, 동작원리, 인증서 비교)
자세한 보안 방식과 설명은 아래 잘 정리해주신 분이 있어 놓아두었다.
여기서 Let's Encrypt 라는 것이 등장한다. SSL을 무료로 이용할 수 있는 오픈소스 인증서로써 유료 인증서 대신 작은 프로젝트들에서 사용할 수 있도록 공개한 것
거기에 Let's Encrypt 설치 및 업데이트를 쉽게 해주는 certbot이 등장하면서 더 쉽게 이용할 수 있도록 변화되었다.
다음 내용들을 Putty를 열어 설치합니다.
sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/
EPEL을 다운로드( Certbot에 필요한 종속성을 공급하는데 필요 )
sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm
리포지토리 패키지를 설치합니다.
sudo yum-config-manager --enable epel*
리포지토리 패키지도 설치가 완료되었다면, epel를 활성화
sudo yum install -y certbot python2-certbot-apache
sudo yum install certbot-nginx
다음 명령어들로 certbot을 설치합니다.
sudo yum install nginx
1. nginx 설치
sudo service nginx start
2. nginx 실행
ps -ef | grep nginx
3. nbinx 실행확인
다음의 과정이 모두 완료되었다면 -nignx 설정 파일에서 sever name과 proxy pass를 설정해주겠습니다.
sudo vi /etc/nginx/nginx.conf
또는
sudo vi /etc/nginx/conf.d/default.conf
를 입력합니다.
설정이 열린다면

1~2번 : 제 게시글을 따라오셨으면 알 수 있듯 www.도메인~ 과 도메인~을 입력해주시면 됩니다.
3번 : AWS의 탄력적 IP
4번 : 아래 프록시 세팅과 add_header 추가
4번의 경우 필요에 따라 작성하자 (없어도 됨)
Access-Control-Expose-Header은 내가 PostMan으로 정보를 보낼때 이 부분이 필요하니 당신은 이를 막지 말아주세요! 라고 설정해 둔것.

필자는 프로젝트에서 로그인시 두가지 토큰과 인증을 받기 때문에 이를 입력하여 항상 이를 사용할 수 있도록 설정하였다.
sudo certbot --nginx
입력해준다.
해당 명령어가 입력되면 서버 사용에 관련하여 이메일주소를 물어볼텐데
엔터를 통하여 확인해주고 Which names would you like to~ 라는 단어가 뜬다면 엔터만 눌러준다.
완료가 된다면 The new certficate~ 라는 문구를 보게될 것이다.
제대로 인증서가 발급되었는지 확인하고 싶다면
sudo certbot certificates
코드 입력을 통해
해당 인증서가 나온다면 성공이다.