TLS / mTLS란?

    들어가기 전

    mTLS는 kubernetes, istio 같은 것들을 이용할 때 많이 등장하는 키워드다. 그런데 정확히 어떤 내용인지 모르기 때문에 간략히 배경 지식을 알아보자. 

     


    TLS 통신

    TLS 통신은 다음과 같이 진행된다.

    1. 서버는 자신의 공개키 / 개인키를 만든다.
    2. 서버는 인증서에 자신의 공개키를 담아서 배포한다. 
    3. 클라이언트는 인증서에서 서버의 공개키를 획득한다. 
    4. 클라이언트는 서버의 공개키를 이용해 랜덤하게 세션키를 생성한 후, 서버에게 전송한다.
    5. 서버는 공개키로 암호화된 세션키를 서버의 개인 키로 복호화한다. (서버의 개인키로만 복호화 할 수 있다) 
    6. 클라이언트 / 서버는 둘다 '세션키'를 가지고 있다. 이제 '암호화 통신'을 할 때, 이 세션키를 이용해 각각 암호화 / 복호화를 하게 된다. 

    비대칭키를 이용해서 암호화 / 복호화를 하는 것은 많은 비용이 든다. TLS 핸드쉐이크를 하는 시점에 단 한 번만 비대칭키를 이용해 암호화 통신을 하고, 이 때 세션키라는 '대칭키'를 만들어낸다. 그리고 이후 통신에서는 '세션키'라는 대칭키를 이용해 통신하기 때문에 속도 관점에서 이점을 가져갈 수 있다. 


    mTLS 통신

    mTLS 통신은 mutual TLS 통신의 약자이다. TLS 통신은 인증서를 이용해 서버만 자신의 신원을 인증했다. mTLS 통신에서는 서버 / 클라이언트가 모두 자신의 신원을 인증한 후에 TLS 핸드쉐이크를 수행한다. mTLS는 서로의 신원을 인증하는 과정이 추가되기 때문에 Network Hop은 더 발생하지만, 좀 더 강화된 보안 체계에서 통신을 하고 싶을 때 사용한다.

    mTLS 과정

    1. 클라이언트는 서버에게 인사한다.
    2. 서버는 자신의 인증서를 클라이언트에게 전송한다.  (이를 통해 클라이언트는 서버의 신원 확인)
    3. 서버는 클라이언트의 인증서도 요청한다. 
    4. 클라이언트는 자신의 인증서를 서버에게 전송한다. (서버는 클라이언트의 신원을 확인한다)
    5. 이후에는 TLS Handshake를 한다. 

    참고

    'etc > 진짜 잡다' 카테고리의 다른 글

    가상 호스트와 SNI  (0) 2024.01.31
    DNS : CNAME vs A record  (0) 2024.01.31

    댓글

    Designed by JB FACTORY