간단히 http와 https의 차이를 살펴 보도록 하겠습니다. 일종의 프로토콜이라는 점에서 공통점이 있습니다. 하지만 http에서는 그 안의 내용을 전혀 암호화하지 않고 보내는 반면 https는 암호화를 합니다. 만약 http를 사용하는데 해커가 중간에서 우리의 결제내역이나 신상을 가로채버린다면 이는 큰 사고로 이어질 수도 있습니다.
하지만 https는 암호화를 하고 풀고 하는 작업이 들어가다보니까 조금 느릴 수 있습니다. 그리고 서버 보안인증서를 발급받아야 합니다. 하지만 AWS는 서버보안인증서를 싸고 쉽게 우리에게 제공합니다.
일단 그 전에 저번에 못본 http://www.knu-kert.com/order/order와 http://www.knu-kert.com/delivery/orders로 들어가서 로드벨런싱과 Route53이 잘 http상에서 잘 동작하는지 알아보겠습니다.
이렇게 뜨고 각각을 눌렀을 때마다 로드벨런싱이 잘 동작하는 것을 콘솔에서 확인할 수 있었습니다. 그리고 health-check도 잘 동작 하는 것을 확인할 수 있었습니다.
Certificate manager를 활용한 https 설정
https에서 통신 프로토콜은TLS(Transport Layer Security)또는 이전에는 SSL을 사용하여 암호화됩니다. "HTTP over TLS"또는 "HTTP over SSL"이라고도 부릅니다.
HTTPS 프로토콜을 사용하기 위해서는 인증기관(CA)으로 부터 SSL인증서를 발급받아야 합니다.
SSL인증서를 발급받은 웹 사이트에서는
아래와 같이 인증서 정보를 확인할 수 있습니다.
인증서 발급 과정및 원리를 간단히 설명하겠습니다. 서버에서 HTTPS프로토콜 사용을 위해 SSL인증서 발급받는 과정을 아래와 같습니다. 여기서 CA란 인증기관을 말합니다.
1. (서버) 서버의 공개키와 비밀키를 생성합니다.
2. (서버->CA) 인증서를 발급받기 위해, 서버는 CA에 아래의 정보들을 전달합니다.
- 1번에서 생성한 서버의 공개키
- 서버의 각종 정보
3. (CA) 2번에서 서버로부터 받은 정보(서버의 공개키도 들어있음)들을 담아 SSL인증서를 발급합니다.
4. (CA) 3번에서 만든 인증서를 암호화하기 위해, CA의 공개키와 비밀키를 생성합니다. CA의 비밀키를 이용해 SSL인증서를 암호화합니다.(CA->Server) 4번에서 암호화한 SSL인증서를 다시 서버에 전달한다. SSL인증서 발급 완료
이렇게 발급받은 SSL인증서에 대한 정보(4번에서 생성한 CA의 공개키 정보까지)는 모두 공개되어 있습니다. 대충.. 이런식입니다.
시작
이제 AWS의Certificate manager를 통해 기존의 ELB를 http가 아닌 https에서 배포해 보도록 하겠습니다.
다음과 같이 DNS인증으로 인증서 요청을 합니다. DNS인증 외에도 이메일 인증이 존재합니다. 왜이러한 인증이 존재하느냐? 만약 우리가www.naver.com에 대한 인증서를 발급하고 ELB에 삽입해 보겠다고 합시다. 그럼 이건 naver의 입장에선 갑자기 딴사람이 와서 우리 도메인가져다가 이상한데로 포워딩 시킨거와 다를게 없게 됩니다.
이를 위해서 인증을 하는데 DNS인증은 우선 어떠한 CNAME을 각 도메인마다 지정해 주는데, 이에 대해 키와 값을 생성해줍니다. 그리고 직접 연결되어 있는 Route53의 도메인에 삽입하게 됩니다. 아래와 같이 말이죠
www이 있는 버전과 없는 버전 둘다 레코드를 생성했습니다. 이 과정에서 인증이 끝난것인데, Certificate manager는 내부적으로 CNAME을 호스팅영역에 있는 값이 같은지를 확인해서 인증을 하는 것입니다. 같다면 인증이 완료된 것이고 다르다면 인증에 실패한 것이됩니다.
두번쨰 방법으로는 이메일 인증이 있습니다. AWS에 로그인 하기 위해 주어졌던 이메일 정보로 검증을 하는 것입니다. 물론 IAM유저 설정이 되어 있으면 권한만 있다면 그 이메일로 검증을 할 수 있는 겁니다. 이는 보안에 취약합니다. 그 이유는 이메일이 털리게 되면 다(도메인) 털리는 것이기 때문이죠.
그래서 AWS안에서 다 처리할 수 있는 DNS인증을 많이 사용하곤 합니다.
하지만 이렇게 인증서를 발급받았음에도 https://접근은 되지 않습니다. 그 이유는 ELB에서 443즉 Https접근을 등록하지 않았기 때문입니다.
만들어 두었던 로드벨런서의 리스너를 다음과 같이 바꾸어 주도록 하겠습니다. 그리고 인증서인 ACM도 아까 만들었던 인증서로 등록해 주었습니다. 그리고 대상그룹도 포워딩 시켜주었습니다. 그다음에는 기존에 했던 것 처럼 규칙을 편집해 보겠습니다.
이렇게 /delivery로 들어오면 tg2으로 그 외는 tg1로 오게 설정하였습니다.
마지막으로 보안그룹의 인바운드 규칙에 대해서 443번 아무 소스로부터 허용해 주도록 하겠습니다.
이제 마지막으로 https://www.knu-kert.com/order/order와 https://www.knu-kert.com/delivery/orders 를 들어가 보겠습니다.
https에 대해서 잘 작동하는 것을 보실 수 있습니다!!