Charles를 이용하여 네트워크 트래픽을 보려면
현재 연결되어 있는 네트워크에 proxy 설정을 해주면 된다.
https 와 같이 ssl proxying 이 필요한 경우에는 Charles 인증서를 설치해주어야 한다.
인증서 별도 설치가 필요한 이유에 대해 간단히 설명하면,
Charles 는 Client <-> Charles (proxy) <-> Server 의 형태로 통신하며, 중간자 역할을 한다.
이 때, Client는 Server의 인증서를 보는 대신 Charles가 동적으로 생성하고,
자체 루트 인증서로 서명한(Charles CA Certificate) 인증서를 본다.
Charles는 서버의 인증서를 받고, Client는 Charles의 인증서를 받는다.
Client는 Charles의 인증서를 신뢰할 수 없기에
해당 인증서를 신뢰할 수 있는 인증서로 취급하도록 설정을 해주어야 한다.
따라서 별도 설치가 필요하다.
Android나 iOS 의 경우 http://chls.pro/ssl 에 들어가서 인증서를 설치할 수 있다.
하지만 Android TV의 경우 인증서를 설치하거나 제어할 수 있는 별도의 UI를 제공하지 않는다.
이 때 Android TV에 Charles의 인증서를 신뢰할 수 있는 인증서로 취급하려면, 다음의 과정을 수행하면 된다.
- Charles > Help > SSL Proxying > Save Charles Root Certificate… 클릭해서
charles_ssl_proxying_certificate.pem
파일을 저장한다. - Android Project 에 res > raw 하위에
charles_ssl_proxying_certificate.pem
파일을 위치시킨다.- res 하위에 raw 디렉토리가 없는 경우 만든다.
- res > xml 하위에
network_security_config.xml
파일을 만든다.- res 하위에 xml 디렉토리가 없는 경우 만든다.
network_security_config.xml
의 내용은 다음 내용으로 채운다.1 2 3 4 5 6 7 8 9 10
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <debug-overrides> <trust-anchors> <certificates src="system" /> <certificates src="@raw/charles_ssl_proxying_certificate" /> <certificates src="user" /> </trust-anchors> </debug-overrides> </network-security-config>
- AndroidManifest.xml 에서 다음 내용을 추가한다.
1 2 3
<application android:networkSecurityConfig="@xml/network_security_config ...
network_security_config.xml
에서 certificates 태그와 함께 추가하면, 신뢰할 수 있는 CA로 추가할 수 있다.
참고: https://developer.android.com/training/articles/security-config?hl=ko#TrustingAdditionalCas
이와 같은 설정 후 확인하고자 하는 호스트를 enable ssl proxying 목록에 추가하면 트래픽을 확인할 수 있다.