SSL Pinning

|

What?

- MITM(Man In The Middle) 공격을 예방하기 위해 사용되는 클라이언트 기법

- 클라이언트와 서버 간 통신 시, 인증서 비교를 하여 인증서가 일치하지 않으면 통신이 되지 않도록  함.

 

SSL Pinning은 클라이언트 측에서 사용하는 기법으로, SSL 핸드셰이킹 이후에도 서버의 증명서를 다시 확인하여 중간자 공격을 피할 수 있다. 개발자는 개발 시 클라이언트 측에 신뢰할 수 있는 증명서들을 저장(embed or pin)하고, 이는 이후 실제 통신 과정에서 서버가 제공하는 증명서와 비교하는 데 사용된다. 만약 이 과정에서 미리 저장된 증명서와 서버가 제시한 증명서가 일치하지 않는다면, 연결은 중단될 것이고, 유저의 정보가 서버로 전송되지 않을 것이다. 이런 강제로 인해 클라이언트는 원래의 서버와 통신할 수 있도록 보장된다.

그러나 SSL Pinning에 대해서 각별히 주의해야 할 경우가 있는데, 클라이언트 측에 미리 저장된 증명서가 만기되거나, 서버 측에서 새로운 증명서를 갖게 되어 클라이언트 측의 저장된 증명서와 다르게 될 경우이다. 이 때, 클라이언트는 더 이상 서버를 믿을 수 없고, 연결을 끊게 되며, 클라이언트 어플리케이션은 그냥 벽돌이 된다(고장난다). 그러므로 이런 상황을 피하기 위해서 릴리즈 이전에 클라이언트 어플리케이션에 미래의 증명서를 저장하는 것(pinning)을 권장한다.

클라이언트 어플리케이션에서 SSL Pinning을 하는 방식엔 주로 두 가지가 있다. 하나는 완전한 증명서를 저장하는 것이고 하나는 해쉬된 공개키(hashed public key)를 저장하는 것이다. 해쉬된 공개키를 저장하는 접근법은 더욱 선호되는데, 하나의 개인키(private key)가 업데이트할 증명서를 사인하는 데 사용될 수 있고, 이에 따라 새로운 증명서를 만들 때 새로운 해쉬된 공개키를 만들 필요가 없고, 앱이 벽돌이 될 위험을 낮출 수 있다.

 

참고자료

https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning

'IT Infra' 카테고리의 다른 글

방화벽 vs. IDS vs. IPS  (0) 2023.09.15
SASE(Secure Access Service Edge)  (0) 2023.08.24
[Jenkins] 젠킨스를 이용한 CI과정  (0) 2023.08.16
DMZ  (0) 2023.08.04
Failover, Failback  (0) 2023.08.03
And