HTTPS는 HTTP의 보안이 강화된 버전이다.
HTTP는 웹브라우저(Clinet)와 서버(Server)간의 웹페이지 같은 자원을 주고 받을 때 쓰는 통신 규약이다.
HTTPS는 인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer)프로토콜을 이용하여 웹브라우저(클라이언트)와 서버가 데이터를 주고 받는 통신 규약이다.
장점
<출처 : http://cryptocat.tistory.com/3 >
암호화, 복호화시킬 수 있는 서로 다른 키 2개가 존재하는데 이 두 개의 키는 서로 1번 키로 암호화하면 반드시 2번키로만 복호화할 수 있고 2번 키로 암호화하면 반드시 1번키로만 복호화할 수 있는 룰이 있는 것이다.
HTTPS를 지원하는 서버에 요청(Request)을 하려면 공개키가 필요하다는 것을 알 수 있다.그러면 그 공개키는 공개키 저장소에 있다는 것은 알겠는데 어떻게 공개키 저장소에서 가져올까?
추가적으로 공개키는 누구나 얻을 수 있고 공개키를 알면 서버가 주는 데이터(Response)는 알 수 있는데 보안상에 의미가 있을까?
보안상의 의미는 없다.대신 얻을 수 있는 이점은 해당 서버로부터 온 응답임을 확신할 수 있다. 왜? 공개키로 해독이 가능했으니까 반드시 해당 서버의 개인키로 암호화했다는 것을 보장하기 때문이다.
https://www.youtube.com/watch?v=0cfUVrQW_yg&list=PLCZ-8rvakaqbplQZAoUku8uuxUgbLQm-1
어떤 SSL(Secure Socket Layer)을 사용하느냐에 따라 달라진다.
아마존, cerbot 등
ex) 클라이언트에서 aws에서 제공해주는 acm 인증서(SSL)을 사용하면 서버 역시 acm을 발급 받아 사용하여야한다.
aws로 발급 받는 방법
aws사이트 -> ec2 -> 로드 밸런서 -> Application Load Balancer(HTTPS) ->
1. 이름을 입력한다.
2. vpc를 기본값이 디폴트로 들어가 있고 2번째 사진의 내 EC2의 가용영역과 동일한 내역을 클릭하고 로드 밸런서 장점이 서버를 여러 개 돌릴 수 있다.(보통 3개 정도를 많이 클릭하던데 이유는 확실히 모르겠다.)
3. 보안 그룹에 내 EC2를 보안 그룹과 동일한 내역을 입력한다.
4. http가 기본으로 하나 있고 https를 추가로 하나 더 열어준다.
태그를 입력한다.(태그를 생성해주어야한다.)
5. 인증서를 선택해준다.(만들어둔 인증서가 없을 경우 아래의 과정을 수행한다.)
하단의 리스너를 클릭한다.
HTTP:80을 체크하고 편집을 누른다.
Add action을 Redirect로 바꿔준다.(기존 80에 있던 태그를 지운다. 로드 밸런싱에서 HTTP에 태그를 입력하지 않으면 생성이 안 되어서 입력했던 태그다.)
포트에 이전에 있던 포트값을 입력해준다.(443)
Full URL을 누르고 Save changes를 누른다.
상태가 활성으로 바뀌고 DNS이름을 복사하여 다시 Route 53으로 가 레코드 생성을 해준다.
생성에서 별칭을 활성화하고 아래에 3가지를 입력해준다.
3번째에 DNS 이름을 입력한다.
상태에서 조금 기다리면 INSYNC로 변경된다.
cors 문제도 발생하기 때문에 그 부분도 설정을 해줘야된다.
WebConfig에 허용하는 주소에 프론트와 백엔드주소를 둘 다 입력해주어야한다.
소셜로그인을 할 경우 아래와 같이 redirect_uri 주소를 변경해주어야한다.
kakao developers에 들어가서 주소도 추가해주어야한다.
윈도우에서는 git bash, 맥에서는 터미널을 열어
1. 내 EC2에 접속을 하고(ssh -i 키패드 ubuntu@EC2주소)
2. 포트포워딩을 확인(sudo iptables -t nat -L --line-numbers)
3. 안 열려있으면 열어준다.(sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080)
4. 다시 확인을 한 번 해준다.
다 되면 주소 입력시 이런 메세지의 창이 뜬다.
AWS로 처리를 하면 로드 밸런서가 처리를 해주므로 NGINX를 안 써도 된다.
이렇게 되면 이제 서버단에서는 끝났고 프론트는 따로 해야된다...
적용하는데 너무 할 것도 많고 내용이 길어 제대로 정리된지도 모르겠다...
자료출처
https://jeong-pro.tistory.com/89
https://github.com/GreenStep99/Backend/issues/113
https://velog.io/@sloools/Spring-Boot
https://velog.io/@byjihye/ubuntu3
https://nerd-mix.tistory.com/35