마이데이터 서비스와 mTLS

구매안내 온라인 문의

양방향 TLS 인증으로 API를 안전하게

API를 이용하여 개인정보, 금융정보 등을 다루는 경우가
증가하면서 본인이 검증된 사용자라는 걸 증명해야하는
mTLS(mutual TLS) 개념이 강조되고 있습니다.
파이오링크는 mTLS 적용과 관련된 많은 레퍼런스를 통해 문제 해결을 제시합니다
기술백서 다운로드

[기술백서]
마이데이터 서비스와 mTLS

상호간의 신뢰 mTLS(mutual TLS)

최근 제로트러스트 환경이 강조되고 API를 이용하여 민감정보(개인정보, 금융정보 등)를 다루는 경우가 증가하면서 클라이언트 역시 본인이 검증된 사용자라는 걸 증명해야하는 mTLS(mutual TLS) 개념이 강조되고 있습니다. mTLS는 TLS Handshake 과정에서 일반적으로 생략되던 클라이언트 인증 절차를 수행하여 서버는 물론 클라이언트 역시 인증서로 본인을 증명하여 상호간 신뢰의 관계에서 통신을 하는 개념입니다.

기존의 TLS와 mTLS의 세션 연결 과정
실제 mTLS 적용 시 패킷

금융 마이데이터와 mTLS

mTLS 사용의 대표 사례는 바로 금융 마이데이터 서비스입니다.
금융 마이데이터 서비스는 개인정보와 관련된 서비스 제공 시 API를 표준으로 사용하여 암호화 통신을 하는 제도입니다.
API 역시 암호화 통신시에는 TLS를 이용 하는데 이때 안전한 개인정보 및 데이터 전송을 위하여 [그림]처럼 금융보안원에서 TLS 이용 시 고려사항을 정리하였습니다. 그리고 그 고려사항에는 mTLS가 포함되어 있습니다.

mTLS 적용하기

01세션을 맺는 방법을 알아보기 전 먼저 해야 할 것은 현재 시스템에서 TLS통신을 담당하는 장비 및 솔루션을 확인하는 것 입니다. (대부분 서버 앞에서 프록시 역할을 하는 웹방화벽이 TLS 통신을 담당하고 있습니다.)
02장비가 확인이 됐다면 TLS와 mTLS의 세션 맺는 과정이 어떻게 다른지 확인합니다.
2-1)
가장 큰 차이는 세션을 맺는데 사용되는 인증서가 다릅니다. 기존 TLS에서는 서버의 CA인증서 1개만 필요했지만 mTLS에서는 3개의 인증서가 필요합니다.
2-2)
3개의 인증서는 아래 그림과 같이 클라이언트 사이드와 서버 사이드에서 각 세션을 맺는데 사용됩니다.
mTLS 세션 연결시 인증서의 흐름도
03TLS와 mTLS의 세션 맺는 과정의 차이점을 확인했다면 각 세션이 어떻게 맺어지는지 확인합니다.
3-1)
클라이언트 사이드의 세션 연결을 먼저 살펴보겠습니다. 기존에는 웹방화벽이 서버의 CA인증서를 클라이언트에게 보내면 클라이언트는 디바이스에 저장된 CA리스트를 통해 해당 인증서가 공인 받은 인증서인지 확인한 후 일련의 세션 연결 과정을 진행하게 되는 방식이었습니다. 하지만 mTLS는 클라이언트가 서버인증서를 확인한 후 웹방화벽이 클라이언트의 인증서를 확인하는 절차가 추가로 필요합니다. 여기서 중요한 것은 클라이언트가 서버의 CA인증서를 확인하는 이유는 서버가 신뢰할 수 있는 정상적인 서버인지 무결성을 확인하기 위함 이라면 웹방화벽이 클라이언트의 인증서를 확인하는 이유는 해당 클라이언트가 서버에 접속이 허가되고 정보를 제공해도 문제가 없는 클라이언트인지 검증하여 기밀성을 지키기 위한 것입니다.
3-2)
다음은 서버 사이드의 세션 연결을 살펴보겠습니다. 서버 사이드의 TLS 세션 연결은 클라이언트 사이드 때와 다르게 웹방화벽이 서버의 프록시 서버로써 이미 서버를 신뢰하고 있기 때문에 서버로부터 받은 CA인증서를 확인하는 과정을 별도로 수행하지 않고 대칭키 생성 및 암호화를 수행하여 세션을 맺게 됩니다. 그리고 여기에 mTLS를 적용하면 클라이언트 사이드때와 마찬가지로 서버는 자신과 세션을 맺으려는 웹방화벽에게 인증서를 요구하고 웹방화벽은 세션을 맺기 위해 준비한 사설 인증서를 서버에 전달합니다. 이때 역시 클라이언트 사이드때와 마찬가지로 서버는 해당 인증서가 허용된 인증서인지 검증하기 위한 인증서 리스트 및 인증서 정보를 가지 있어야 합니다.

이처럼 mTLS를 적용하여 세션을 맺기 위해서는 각 사이드에서 클라이언트를 검증하는 과정이 추가되어야 합니다.
04서버가 클라이언트를 확인할 수 있는지 확인합니다.
앞서 설명한 방법을 통해 세션이 연결되면 서버는 클라이언트 정보를 직접 받지 않기 때문에 서버에서는 클라이언트를 구분할 수 없습니다.
특히 마이데이터 서비스의 경우 서비스를 이용하는 기관과 기업 모두 상호인증을 위한 SERIALNUMBER(사업자등록번호)가 포함된 TLS인증서 정보를 마이데이터 종합포털에 등록하여야 합니다. 그리고 이 정보들을 바탕으로 정보 제공자는 정보를 요청한 클라이언트가 마이데이터 종합포털에 등록된 사업자가 맞는지 확인하게 됩니다.

즉, 아래 [그림]처럼 웹방화벽에서 서버로 클라이언트 요청을 프록시할 때 클라이언트를 구분할 수 있도록 요청 헤더에 클라이언트 사이드에서 획득한 클라이언트 인증서 정보를 포함시켜 서버에게 전달해줘야 합니다. 이처럼 헤더에 클라이언트의 인증서 정보가 포함된다면 서버에서 클라이언트를 식별할 수 있게 되어 마이데이터 종합포털에 등록된 사업자인지 확인할 수 있게 되고, 필요시 클라이언트 정보를 추출하거나 색인 할 수도 있습니다.
파이오링크 WEBFRONT-K GUI에서 Mutual TLS 기능을 통한 헤더값 변경
지금까지 mTLS적용을 위해 고려되어야 할 사항을 알아봤습니다. 물론 더 많은 고려사항이 있겠지만, 앞서 설명한 내용들이 실제 mTLS를 적용하면서 많은 담당자들이 고민하고 어려워하는 대표적인 사항이라 생각됩니다. 이 밖에도 파이오링크에서는 마이데이터 서비스를 위해 mTLS적용을 고민하던 많은 고객들과 함께 문제를 해결하며 얻은 다양한 레퍼런스를 가지고있으니 mTLS와 관련된 고민이 있다면 언제든 파이오링크의 전문가들과 상담하여 문제를 해결하길 바랍니다.