AWS(Amazon Web Service)

[AWS] SSL(TLS)인증서

yunseohhe 2024. 10. 3. 10:47

SSL(TLS)인증서

  • 클라이언트와 로드 밸런서 사이에서 트래픽이 이동하는 동안 암호화해준다.
     = 전송 중(in-flight) 암호화라고 한다. 
        (cf : 데이터는 네트워크를 이동하는 중에는 암호화되고, 송신자와 수신자 측에서만 이를 복호화할 수 있다.)
  • "보안 소켓 계층"을 의미하고, 연결을 암호화하는데 사용한다.
  • TLS 새로운 버전의 SSL로, "전송 계층 보안"을 의미한다.
     (그래서 사실 SSL이 아니라 이제는 TLS라고 불러야되는데, 여전히 SSL로 불린다)
  • Public SSL
      : 인증 기관(CA)에서 발급한다.
        (인증 기관 - Comodo, Symantec, GoDaddy, GlobalSign, Digicert, Letsencrypt,... 등등)
      : 이 SSL를 로드 밸런서에 추가하면, 클라이언트와 로드 밸런서 사이의 연결을 암호화할 수 있다.
  • Google.com이나 그런 류의 웹사이트를 방문했을 때,
      : 녹색 표시 같은게 뜨면 트래픽이 암호화되고 있다는 뜻이다.
      : 반대로 빨간색 표시가 뜨면, 트래픽이 암호화되지 않았으니 신용카드 정보나 개인 정보 같은 걸 넣지 말라고 알려주는 것이다.
  • SSL 인증서에는 만료 날짜가 있어서 주기적으로 갱신해 인증 상태를 유지해야 한다.

 

SSL은 로드 밸런서에서 어떻게 동작할까?

(출처 : 구글이미지)

  • 먼저 사용자가 HTTPS를 통해 접속한다.
    'S'가 붙은 건 SSL 인증서를 써서 암호화해 안전하다는 뜻이다.
  • 인터넷을 통해 우리 로드 밸런서에 접송하면, 로드 밸런서에서는 내부적으로 SSL 종료(SSL Termination)을 수행한다.
  • 백엔드에서는 HTTP로 EC2 인스턴스와 암호화 되지 않은 상태로 통신한다. 하지만 VPC로 이동하는 트래픽은 프라이빗 네트워크를 쓰기 때문에 안전하게 보호된다.
  • 로드 밸런서는 X.509 인증서를 사용하는데, 이게 바로 'SSL 또는 TLS 서버 인증서'라고 부른다.
  • AWS에는 이 인증서들을 관리할 수 있는 'AWS 인증서 관리자'(ACM)이 있다.
     : 사용자가 가진 인증서를 ACM에 업로드 할 수도 있다.
  • HTTPS listener
     : HTTP리스너를 구성할 때 반드시 'HTTPS' 리스너로 해야한다.
     : 기본 인증서를 지정해줘야 한다.
     : 다중 도메인을 지원하기 위해 다른 인증서를 추가할 수도 있다.
     : 클라이언트는 SNI(서버이름지정)이라는 걸 써서 접속할 호스트의 이름을 알릴 수 있다.
     : 사용자가 원하는 대로 보안 정책을 지정할 수 있다. (구 버전의 SSL과 TLS, 즉 레거시 클라이언트를 지원할 수도 있다.)

 

SNI(Server Name Indication)

  • 아주 중대한 문제의 해결책으로 여러 개의 SSL 인증서를 하나의 웹 서버에 로드해 하나의 웹 서버가 여러 개의 웹 사이트 지원할 수 있게 해준다.
  • "newer"(확장)된 프로토콜로, 클라이언트가 대상 서버의 호스트 이름을 지정하도록 하며 최초 SSL 핸드셰이크 단계이다.
  • 클라이언트가 접속할 웹사이트를 말했을 때, 서버는 어떤 인증서를 로드해야하는지 알 수 있게 된다.
  • 이 프로토콜은 ALB와 NLB, CloudFront에서만 작동한다.(CLB 작동하지 않는다!)

(출처 : 구글이미지)

  • 이미지 가운데에 ALB이고, 대상그룹은 2개가 있다. 그리고 하나는 'www.mycorp.com'이고, 하나는 'Domain1.example.com'이다.
  • ALB는 어떤 규칙에 의해 트래픽을 라우팅할 대상 그룹을 고를 것이다. (여기서 규칙이란, 호스트 이름을 뜻한다!)
  • ALB에는 두 개의 SSL 인증서가 있다. Domain1.example.com과 www.mycorp.com 각 대상 그룹에 해당하는 인증서
  • 클라이언트는 ALB에 접속해 'ww.mycorp.com에 접속하고 싶어'라고 말하면, 이 과정도 서버 이름 지정 과정이다.
    그러면 ALB는 mycorp.com에 접속하고 싶다는걸 파악한 후, 해당하는 SSL 인증서를 로드한다. 
    해당하는 인증서를 가져와 트래픽을 암호화한 다음, 규칙에 따라 대상 그룹인 mycorp.com으로 요청을 재전송해야 한다. 
  • 만약, 또 다른 클라이언트가 ALB에게 Domain1.example.com에 접속을 요구한다면, 역시 해당하는 SSL 인증서를 가져와 원하는 대상 그룹으로 연결해 줄 것이다. 
  • 위에 예시처럼 SNI(서버 이름 지정)을 사용해서 여러 개의 대상 그룹과 웹사이트를 지원할 수 있다.
    (다중 SSL 인증서를 사용해서)

 

ELB(Elastic Load Balancers)의 SSL 지원 항목

  • CLB(Classic Load Balancer)
     : 지원하긴 하지만 SSL인증서를 하나만 둘 수 있다.
     : 여러 개의 인증서로 여러 호스트 이름을 지원하려면 클래식 로드 밸런서 자체를 여러 개 둬야 한다.
  • ALB(Application Load Balancer)
     : V2 밸런서로 여러 개의 SSL 인증서를 두고 리스너를 여러 개 지원할 수 있다. 거기에 SNI를 사용하는 것이다.
      (위에 이미지처럼)
  • NLB(Network Load Balancer)
     : 여러 개의 SSL인증서로 다중 리스너를 지원한다.