http를 https로 바꾸라는 과제를 하기전에 http 와 https의 차이점을 간략하게 정리하고자한다.
간략하게 핵심적인 차이점을 말하자면
http에 SSL보안을 더한 것이 https이다.
http는 비연결식으로 클라이언트가 요청하면 서버가 응답하는 구조이다. (비연결식하면 떠오르는 UDP)
https은 SSL이나 TLS프로토콜을 이용하여 세션 데이터를 암호화 하여 통신을 한다.
작년에 암호과제에 보조연구원으로 공부할 때 Wireshark에서 지겹도록 본 SSL, TLS....
TLS의 Handshake를 지겹도록 공부했는데....나름의 도움이 된 것 같다.
http가 비연결식이라면 https는 연결식이기 때문에 통신을 하기 이전에 handshake 과정이 필요하다.
handshake과정을 통해 SSL인증서로 서버가 신뢰할 수 있는지 판단을 한다.
이러한 과정들이 추가되었으니 조금은 느려질 수 밖에 없을 것이다.
https를 사용하게 되면 http보다 느리지만 지금의 인터넷 속도에서는 큰 의미가 없다고 한다.
요새는 https를 사용하게 되면 검색시 우선순위가 분여된다고 한다. 키워드 검색시 https페이지가 먼저 검색된다는 것!
하지만 무조건적으로 https가 안전하는 것은 아니라고 한다.
이쯤해두고 직접 https를 만들어보자!
만들어둔 EC2에서는 nginx가 깔려 있기 때문에 이를 사용해서 https를 적용시키자.
시작하기에 앞서 항상 yum 업데이트해주기!
sudo yum update
1.인증서 설치하기
인증서를 설치하는데는 두가지 방법이 있다.
1.letsencrypt를 설치해서 ssl등록하기
2.ACM(AWS Certificate Manager)에서 SSL등록하기
나는 두번째 방법을 사용할 것이다. AWS에서 ACM은 무료이다.
ACM와 더불어 Route53, EC2 Load Balancer를 사용할 것이다!
여기까지 성공하면 이렇게 성공! 이뜬다! 조금만 기다리면 발급 완료 처리가 된다.
다음은 EC2로드 밸런서 설정을 해야한다.
[EC2 -> 로드 밸런싱 -> 로드 밸런서 -> Load Balancer생성]
쓰고 있던 보안그룹 선택
이때 밑에서 인스턴스를 선택하고 꼭 등록을 시켜서 위의 '등록된 대상'탭에 들어가는 것을 확인해야한다....!!!!
(한참 해맸음....)
nginx가 실행되는 인스턴스 선택하고 생성된 load balancer를 다시 확인해보자
규칙편집을 눌러주고
계속해서 편집 아이콘을 누르고 아래와 같이 설정해준다
다음은 아까 생성한 Route53테이블에 다시가기!
아까 만든 A유형의 레코드를 별칭이 있도록 다시 만들어준 뒤 라우팅 대상에 방금 만든 로드 밸런서 선택
443(https)포트를 열어두기 위해 EC2에 사용된 보안 그룹에 443포트틀 열자
2.nginx 설정하기
nginx.conf파일을 열자!
vi /etc/nginx/nginx.conf
AWS공식 홈페이지에 나와있는 그대로 수정해주자
if ($http_x_forwarded_proto != 'https'){
return 301 https://$host$request_uri;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:80;
proxy_redirect off;
}
위의 내용을 추가해주고 nginx restart해주면!
성공쓰☺️