2021년 1월 21일 목요일

Charles 프로그램으로 앱 테스트시에 데이터 전송확인

 앱에서 데이터가 제대로 서버로 전송되고 있는지 확인하기가 여간 까다롭다.

Charles라는 (유료)을 쓰면 전송데이터를 까볼수 있다.

원리는 Charles가 설치된 컴퓨터를 프록시서버로 정해서, 네트워크에 프록시로 지정한 컴퓨터에 일단 데이터를 까볼수 있게 보내면 프록시가 해당 주소에 대신 https 로 보내주는 거다.

ssl 통신보기, end point주소 강제 변경, 반복요청(Dos공격같은), 전송속도조절,리퀘스트 수정(앱을 수정안하고 데이터형태만 바꿔서 보내보고 싶은때등) 의 여러가지 기능이 있다. 

이래서 해외 프록시서버 함부로 지정하면 걍 털리는 거다.

여튼

기본 사용법은

프로그램설치후

1.Proxy메뉴에 SSL Proxying Settings 에 Include 에 ssl로 보내는걸 허용할 특정주소 또는 모든 주소 *:* 를 지정하면 모든 SSL 패킷에 대해 Charles를 거치게 된다.

include 항목에 *:*를 추가하자

2.Proxy메뉴의 Proxy Setting에 가면 포트가 있다 8888 로 두자. 이포트는 나중에 단말(아이폰과 안드로이드에서 네트워크속성에서 프록시지정할때에 사용된다.

3.안드로이드 단말의 경우 네트워크에서 접속중인 Wifi 연결정보를 수정할때(즉 인터넷연결 암호입력하는 그 창에서), Advanced Options을 눌러서 proxy항목을 none->Manual로 한다.

그밑의 Proxy hostname을 192.168.0.100으로 자신의 아이피를 지정

Proxy port를 아까의 8888 포트로 지정한다.

그러면 일단 연결이되고 인터넷전송데이터들이 Charles session의 목록에 보이지만 내용은 https 이라 볼수 없다. 

4.우리 앱에서는 https로 보내더라도 Charles프로그램에서 그 내용을 까보도록 하고 싶다.

5.Charles 의 Help > SSL proxing 에서 Install Charles Root Certicificate 를 해서 컴퓨터에 인증서를 설치하자.

6. 그리고 맥의keychain에서 charles키를 검색해서 그림처럼 Always Trust해준다. 컴터 로그인암호를 입력까지 해주면 파란색+ 버튼으로 바뀐다.



6.우리 안드로이드 앱에서는 앱안에 Charles의 인증서를 다운받아 넣어주면 전송데이터가 사람이 볼수 있는 형태가 된다
Charles > help > Save Charles Root Certificiate를 선택해서 인증서 파일을 cer 형식으로 지정하여 다운받는다.

7. 이제 우리앱에서 
 7-1. res/raw/charles_ssl_proxying_certificate.cer 에 아까 다운받은 파일을 넣는다.
 7-2. res/xml/network_security_config.xml 파일을 만들고(있다면 그냥 내용만 비교해서 수정) 아래처럼 입력한다.
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system"/>
        </trust-anchors>
    </base-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="@raw/charles_ssl_proxying_certificate"/>
        </trust-anchors>
    </debug-overrides>
</network-security-config>

8.앱을 실행하면 우리앱에서의 전송데이터(ssl 데이터도)가 그냥 모두 보이게  된다.

9. 에뮬레이터의 경우 인터넷 network proxy설정에서 맥컴퓨터의 아이피가 아니라 , gateway 10.10.0.2 등과 같이 지정해야 된다. (주의!)

10. 가끔 Charles의 프록시 설정 때문에  Gradle이 원격지에서 데이터를 못가져올때 있다. 이때는 잠시 Charles 의 Stop proxy를 하자.

11.실기기나 에뮬의 경우 모바일통신이 켜져있으면 그걸 우선으로 하는 경우가 있어서 그걸끄고 해야 프록시가 적용된다.

 



0 comments:

댓글 쓰기