본문 바로가기

💻 개발IT/Infra

[AWS] EC2에 HTTPS 적용하기 (feat. Mixed Content 에러)

Mixed Content 

에러 발생 

client 코드에서 Mixed Content 에러가 발생했다.

Mixed Content: The page at '<URL>' was loaded over HTTPS, 
but requested an insecure XMLHttpRequest endpoint '<URL>'. 
This request has been blocked; the content must be served over HTTPS.

Mixed Content 에러란?

HTTP를 통해 가져온 콘텐츠가 포함되어 있는 HTTPS 페이지를 Mixed Content page라고 한다.

보통, HTTPS 페이지는 서버 연결이 TLS로 암호화되어 man-in-the-middle(MiTM) 공격에 대해 보호된다.

하지만 Mixed Content page는 부분적으로 암호화되어 안전하지 않다. 

 

 MiTM 공격 : 네트워크 통신을 조작해서 중간자로 침입하여 정보를 도청하거나 조작하여 전달

더보기

※ TLS

 1) Client가 연결 요청

 2) Server가 자신의 공개키가 포함된 인증서 전달

 3) Client가 Server에게 받은 인증서를 연결 프로그램 혹은 운영체제에 있는 루트 인증서와 비교하여 무결성 검증.

      인증서의 공개키로 대칭형 암호화 키를 생성하기 위한 난수를 공개키로 암호화하여 Server에게 전송

  4) Client, Server가 난수를 통해 암호화 키를 생성하여 암호화 연결 

Mixed Content 종류

Mixed Content는 passive/display content, active content 두 종류가 있다.

 

passive/display content

  • HTTP로 요청된 컨텐츠 중 사이트 전체에 영향이 없는 컨텐츠
  • 주로 이미지, 오디오, 비디오 등
  • 이러한 유형은 공격자가 부적절한 이미지나 메시지로 교체되거나
    컨텐츠를 통해 사용자의 활동 정보를 유추할 수 있으나 active content보다 risk는 낮아
    크롬 개발자 도구에서 Warnings(노란색)으로 표시

active content

  • HTTP로 요청된 컨텐츠 중 사이트 전체 혹은 일부에 접근할 수 있는 컨텐츠
  • 주로 script, link, iframe, fetch 요청 등
  • 이러한 유형은 페이지의 동작을 변경시킬 수 있고,
    사용자의 민감한 데이터를 훔칠 수 있어 
    크롬 개발자 도구에서 Error(빨간색)으로 표시

해결 방법

해결하기 위해서는 HTTP 콘텐츠에 대한 모든 요청을 HTTPS로 변경해야 한다.

현재 서버를 EC2 (HTTP)를 사용하고 있기 때문에 HTTPS를 적용해야 한다.

 

 

웹 서버에 HTTPS 적용

SSL 인증서 발급

우선, HTTPS를 위한 SSL 인증서를 발급받아야 한다.

AWS Certificate Manager(ACM. AWS의 인증서 관리)에서 인증서를 발급받으면 무료이므로

Certificate Manager에 접속한다.

주황색의 [인증서 요청] 버튼을 누르고

인증서 유형은 [퍼블릭 인증서(공인 인증서) 요청]을 누른 뒤 [다음] 버튼을 누른다.

 

도메인 이름에 SSL을 설치하고자 하는 도메인을 입력한다.

(Route53과 연결된 도메인. 만약 안 했다면 아래 사이트 참고!)

https://sunghee2.tistory.com/entry/AWS-EC2%EC%99%80-%EB%8F%84%EB%A9%94%EC%9D%B8%EC%9D%84-%EC%97%B0%EA%B2%B0%ED%95%B4%EB%B3%B4%EC%9E%90

 

[AWS] EC2와 도메인을 연결해보자!

도메인 구매 도메인 구매에 대한 글은 아래에 자세히 작성했으니 아래 글 참고 부탁드립니다~ 무료(& 유료) 도메인을 얻어보자! (Freenom, goDaddy) 무료(& 유료) 도메인을 얻어보자! (Freenom, goDaddy) 무

sunghee2.tistory.com

 

검증 방법은 DNS 검증을 선택하고, [요청]을 누른다.

인증서 생성 요청은 완료되었지만

해당 도메인이 내 소유인지 확인하는 절차가 남았다.

생성된 인증서의 상세페이지-[도메인]-[Route 53에서 레코드 생성] 버튼을 눌러서

Route 53에 해당 도메인의 레코드가 만들어지도록 한다.

레코드 생성 후

몇 분 지나면 인증서 발급 성공

 

 

Load Balancer(ELB) 생성

ELB(Elastic Load balancing)는 여러 가용 영역의 트래픽을 여러 EC2 인스턴스로 분산시켜주는 서비스이다. (L4/L7)

[AWS]-[EC2]-[로드밸런싱]-[로드밸런서]로 이동한 뒤,

[로드밸런서 생성]을 클릭한다.

 

로드밸런서 타입은 첫 번째

[Application Load Balancer]-[Create]를 선택한다.

 

로드밸런서를 위한 Basic configuration을 작성해준다.

  • Scheme : Internet-facing
    ※ Internet-facing : 클라이언트의 요청을 target으로 인터넷을 통해 라우팅
       internal : 프라이빗 IP 주소를 사용하여 받은 요청을 target으로 라우팅
  • IP address type: IPv4
    ※ IPv4 : 클라이언트가 IPv4 주소를 사용하여 로드밸런서와 통신
       듀얼 스택 : 클라이언트가 IPv4, IPv6 모두 사용하여 통신
  • VPC : EC2 인스턴스와 동일한 VPC 선택
  • Mappings: 보통 VPC에서 생성된 가용영역 전부 선택 (EC2 인스턴스가 생성된 VPC와 가용영역을 반드시 포함)

 

  • Security Groups : 기존 ec2 인스턴스에서 사용하는 보안그룹 (단, 인바운드에 443(HTTPS) 열어주어야 함)
  • Secure listener
    • Default SSL/TLS certificate : From ACM. 위에서 생성한 인증서 도메인 입력
  • Listeners and routing : 로드밸런서로 들어온 트래픽을 어디로 전달할지 등록. 
    • Protocol : HTTPS
    • Port : 443
    • Default action : target group 생성 필요 (하단에서 진행)

우선 하단의 [Create target group]을 클릭한다.

 

target group을 생성하기 위한

configuration을 작성한다.

  • target type : Instances
  • Protocol : HTTP
  • Port : 5000 (node.js)
  • VPC : 연결할 EC2 인스턴스의 VPC
  • Protocol version : HTTP1
  • Health check protocol : HTTP
  • Health check path : /

Available instance에서 전체 선택해서 [Include as pending below]를 눌러 

[Register pending targets]을 누르면 생성 완료!

※ 만약 추가한 targets이 unhealty(404)일 경우 [Health checks] 를 수정해서 컨텐츠가 있는 Path로 변경 필요

 

HTTPS 적용

[AWS]-[Route 53]-[호스팅 영역]-도메인 클릭-[레코드]를 선택하고

A 유형의 레코드를 삭제한다

 

[레코드 생성]을 누르고

아래 화면과 UI가 다르면 우측 상단의 [마법사로 전환]을 누른다.

 

단순 라우팅을 누른 뒤 [다음]을 선택한다.

 

[단순 레코드 정의]를 누른 후,

아래와 같이 내용을 채운 뒤 [단순 레코드 정의]를 선택한다.

  • 레코드 유형 : A
  • 값 트래픽 라우팅 대상
    • Application/Classic Load Balancer에 대한 별칭
    • EC2가 있는 리전
    • 위에서 생성한 로드밸런서 선택

반응형