TLS / mTLS란?
- etc/진짜 잡다
- 2024. 1. 31.
들어가기 전
mTLS는 kubernetes, istio 같은 것들을 이용할 때 많이 등장하는 키워드다. 그런데 정확히 어떤 내용인지 모르기 때문에 간략히 배경 지식을 알아보자.
TLS 통신
TLS 통신은 다음과 같이 진행된다.
- 서버는 자신의 공개키 / 개인키를 만든다.
- 서버는 인증서에 자신의 공개키를 담아서 배포한다.
- 클라이언트는 인증서에서 서버의 공개키를 획득한다.
- 클라이언트는 서버의 공개키를 이용해 랜덤하게 세션키를 생성한 후, 서버에게 전송한다.
- 서버는 공개키로 암호화된 세션키를 서버의 개인 키로 복호화한다. (서버의 개인키로만 복호화 할 수 있다)
- 클라이언트 / 서버는 둘다 '세션키'를 가지고 있다. 이제 '암호화 통신'을 할 때, 이 세션키를 이용해 각각 암호화 / 복호화를 하게 된다.
비대칭키를 이용해서 암호화 / 복호화를 하는 것은 많은 비용이 든다. TLS 핸드쉐이크를 하는 시점에 단 한 번만 비대칭키를 이용해 암호화 통신을 하고, 이 때 세션키라는 '대칭키'를 만들어낸다. 그리고 이후 통신에서는 '세션키'라는 대칭키를 이용해 통신하기 때문에 속도 관점에서 이점을 가져갈 수 있다.
mTLS 통신
mTLS 통신은 mutual TLS 통신의 약자이다. TLS 통신은 인증서를 이용해 서버만 자신의 신원을 인증했다. mTLS 통신에서는 서버 / 클라이언트가 모두 자신의 신원을 인증한 후에 TLS 핸드쉐이크를 수행한다. mTLS는 서로의 신원을 인증하는 과정이 추가되기 때문에 Network Hop은 더 발생하지만, 좀 더 강화된 보안 체계에서 통신을 하고 싶을 때 사용한다.
- 클라이언트는 서버에게 인사한다.
- 서버는 자신의 인증서를 클라이언트에게 전송한다. (이를 통해 클라이언트는 서버의 신원 확인)
- 서버는 클라이언트의 인증서도 요청한다.
- 클라이언트는 자신의 인증서를 서버에게 전송한다. (서버는 클라이언트의 신원을 확인한다)
- 이후에는 TLS Handshake를 한다.
참고
'etc > 진짜 잡다' 카테고리의 다른 글
가상 호스트와 SNI (0) | 2024.01.31 |
---|---|
DNS : CNAME vs A record (0) | 2024.01.31 |