mTLS란 무엇인가
웹사이트에 접속할 때 브라우저 주소창에 자물쇠 아이콘이 뜨는 걸 본 적 있을 것이다. 이는 TLS(Transport Layer Security)를 통해 서버가 자신의 신원을 인증서로 증명했다는 뜻이다. 하지만 일반적인 TLS는 ‘서버’만 자신을 증명하고, 클라이언트(사용자)는 별도로 신원을 증명하지 않는다. mTLS(mutual TLS, 양방향 TLS)는 여기서 한 단계 더 나아가 클라이언트도 자신의 인증서를 제시해서 서버가 클라이언트를 검증하도록 만드는 방식이다. 즉 서버와 클라이언트가 서로에게 ‘나는 내가 맞다’는 것을 인증서로 증명하는 구조다.
동작 원리와 예시
일반 TLS 핸드셰이크는 서버가 인증서를 보내고 클라이언트가 이를 검증하는 것으로 끝난다. mTLS는 여기에 다음 과정이 추가된다.
- 서버가 클라이언트에게 인증서를 요청한다
- 클라이언트는 자신의 인증서를 서버에 전송한다
- 서버는 이 인증서가 신뢰할 수 있는 CA(인증기관)에서 발급된 것인지 검증한다
- 양쪽 검증이 모두 끝나야 암호화된 통신 채널이 열린다
비유하자면 일반 TLS는 은행 창구 직원이 신분증을 보여주며 ‘저는 이 은행 직원입니다’라고 증명하는 것이고, mTLS는 고객도 자신의 신분증을 제시해서 ‘저는 실제 계좌 주인입니다’라고 서로 증명하는 것과 같다. 은행 입장에서는 상대가 누군지 모른 채 거래를 진행할 수 없기 때문에, 신뢰할 수 있는 양측만 대화를 이어갈 수 있는 셈이다.
실무에서 왜 쓰는가
mTLS는 특히 마이크로서비스 아키텍처나 내부 API 통신에서 많이 사용된다. 서비스가 수십, 수백 개로 쪼개진 환경에서는 ‘이 요청이 정말 우리 시스템 내부에서 온 것인지’를 확인하는 것이 중요한데, 아이디와 비밀번호 같은 방식보다 인증서 기반 검증이 훨씬 안전하고 자동화하기 쉽다. 대표적으로 쿠버네티스의 서비스 메시인 Istio나 Linkerd는 서비스 간 통신에 mTLS를 기본으로 적용해서, 각 서비스가 서로의 신원을 확인한 뒤에만 통신하도록 만든다. 또한 결제 시스템처럼 보안이 중요한 API나, 외부 파트너사와 데이터를 주고받는 B2B 연동에서도 mTLS는 위조된 요청이나 중간자 공격(MITM)을 막는 핵심 수단으로 쓰인다. 결국 mTLS는 ‘누구나 접속할 수 있는 서버’가 아니라 ‘검증된 상대끼리만 대화하는 채널’을 만들고 싶을 때 선택하는 기술이다.