Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP -> HTTPS 로 배포방식 변경 #113

Closed
kyuhyun-sim opened this issue Sep 7, 2022 · 2 comments
Closed

HTTP -> HTTPS 로 배포방식 변경 #113

kyuhyun-sim opened this issue Sep 7, 2022 · 2 comments
Assignees
Labels
enhancement New feature or request

Comments

@kyuhyun-sim
Copy link
Contributor

기존 HTTP에서 보안을 위해 HTTPS 방식으로 배포방식을 변경

@kyuhyun-sim kyuhyun-sim added the enhancement New feature or request label Sep 7, 2022
@kyuhyun-sim kyuhyun-sim self-assigned this Sep 7, 2022
@kyuhyun-sim
Copy link
Contributor Author

certbot을 사용해보려 했지만, 클라이언트를 aws에서 제공해주는 acm 인증서를 발급받아 사용하였기에, 서버 역시 acm을 발급 받아 https를 만들어보기로 했다.
acm은 코드적으로 바꿀 부분은 없었다.
먼저 aws 사이트에 들어가 Route53에서 도메인을 등록해야 했다.(acm은 ip 주소로는 발급받을수 없기에 도메인이 필요하다. *모든 SSL이 ip 주소로 발급 못받는 것은 아니다.)
그 뒤 호스팅 영역을 생성하였다.
다음으로 Certificate Manager에서 등록한 도메인 정보를 입력, DNS 검증을 통해 ACM 인증서를 발급 받급을 신청했다.
이때 계속해서 인증보류가 되는 문제가 발생했는데 한참을 찾은 뒤에야 원인을 찾을 수 있었다.
바로 Route53에서 호스팅 영역을 통해 자동으로 생성되는 NS레코드의 값이 등록된 도메인의 NS레코드값과 일치하지 않는 것이었다.
다양한 사이트를 찾아보았지만 모자이크 처리등으로 가린채 이부분의 설명을 넘기는 경우가 대부분이라 한참을 헤멨다...
그뒤 다시 Certificate Manager로 돌아가서 호스팅 영역을 불러와 CNAME를 생성하니 곧바로 인증서를 발급받을 수 있었다.

이 발급받은 인증서를 가지고 EC2 서비스에서 로드 밸런서를 통해 https 서버를 배포하기로 했다.
이 로드밸런서를 사용하는 이유는 서버의 트래픽 부하를 내부섭와 외부서버로 나누어 분산하여 처리해줄수 있기 때문이다.
이름을 정한 후 내가 배포중인 ec2 인스턴스와 일치하는 한국서버와 매핑, 보안 그룹 역시 ec2 인스턴스의 보안그룹을 입력해주면 되었다.
리스너 라우팅에서 전달 태그를 태그그룹을 통해 생성하였다.
이때 프롵콜은 http, port번호는 80으로 선택하였고, Health check protocol 역시 마찬가지로 HTTP로 설정하였다.
health check path의 경우 서버 자체가 /부터 사용할 수 있었기에 기본 경로인 /로 설정해 준뒤 다음 페이지로 넘어가 배포중인 ec2인스턴스에 태그값을 넣어주었다.
다음으로 다시 리스너 라우팅 페이지로 돌아가 리스너를 추가, 프로토콜 값을 HTTPS:443으로 넣고, 태그 대상에 이번에 생성한 태그를 넣어주어 HTTPS 포트와 HTTP 포트가 연결되게 만들어 주었다.
다음으로 Secure listener settings 탭의 Default SSL/TLS certificate에서 ACM 탭을 선택한뒤 발급받은 인증서 정보를 입력한 뒤 로드 밸런서를 생성.
이후 생성된 로드밸런서의 HTTP:80 리스너를 삭제하고 다시 생성하여 리디렉션 대상https://#{host}:443/#{path}?#{query}, 상태 코드 상태 코드:HTTP_301 로 443포트와 연결시켜 주었다.
여기까지 완성하였지만 태그가 인스턴스에서 Health check path에서 오류를 발생하였다.
이 문제를 해결하기 위해서 다양한 방법을 시도해봤는데 이역시 원인은 전과 마찬가지로 호스팅 영역에 있었다.
바로 호스팅 영역에 A레코드를 생성, 이 A레코드에 로드밸런서의 값을 넣어줘야 한다는 것이었다.
이역시 값이 대부분의 사이트에서 모자이크 등으로 가려져 있었기에 임의로 내 EC2의 ip를 넣어 만들었었는데 이 경우 도메인과 ip가 직접적으로 연결되어 로드밸런서와 엮을수 없었던 것이었다.
별칭을 활성화하여 소스 입력이 아닌 메뉴얼을 통해 비교적 간단하게 로드밸런서의 값을 넣어줄수 있었다.
최종적으로 ec2 서버를 가동시키자 https로 정상적으로 서버가 배포되는것을 확인 할 수 있었다.

@AnnieHa1002
Copy link
Member

와우 어렵다잉 고생하셨습니다 정말로!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants