자체 인증서 설치가 허용되지 않는 Android 기기에서 앱 디버깅 중에 Charles에서 HTTPS 트래픽 분석을 수행하는 방법
앱을 디버깅 할 때 Charles에서 HTTPS 트래픽을 구문 분석하고 싶지만 인증서를 넣을 수없는 문제
안드로이드 앱을 만드는 데 있어서, Charles 에 의한 HTTPS의 트래픽 해석에 큰 도움이 되고 있다고 생각합니다.
이제 Charles에서 HTTPS 트래픽을 구문 분석하려면 Charles가 발급한 자체 인증서를 Android 인증서 저장소에 등록해야 하지만 일부 Android 기기(예: 일부 AndroidTV)에서는 인증서 저장소 에 자체 인증서를 설치할 수 없는 경우도 있습니다.
Android 7.0 이상 한정의 방법이 됩니다만, 그러한 Android 기기에서도 앱 디버그시에 Charles로 HTTPS를 해석할 수 있도록 하는 방법을 발견했기 때문에 적습니다.
기법 개요
Android 7.0부터 네트워크 보안 사양이 변경되어 매니페스트에서 명시적으로 트러스트 스토어를 지정하게 되었습니다.
이 기능을 활용하여 '디버그 버전 앱에 RAW 리소스로 포함된 Charles가 발급한 자체 인증서를 신뢰합니다'라는 설정을 넣으면 디버깅 시에만 Charles에서 HTTPS 트래픽을 탐색할 수 있습니다.
구체적인 기법
(1) Charles의 인증서를 디버깅 할 때만 앱에 포함
먼저 Build Variants를 활용하여 디버그 빌드 버전 앱 리소스에만 Charles의 인증서를 포함합니다.
Charles를 시작하고 메뉴에서 [Help] > [SSL Proxying] > [Save Charles Root Certificate]를 선택하고 Charles 인증서(PEM 형식)를 원하는 곳에 저장합니다.
그런 다음 Android Studio의 다음 경로에 PEM 파일을 설치하여 Raw 리소스로 Debug 빌드에만 포함합니다.
※Raw 자원에는 파일명의 제한이 있기 때문에, 앞의 순서로 보존한 PEM 파일의 확장자등을 제거해 「charles_ca_pem」이라고 하는 이름으로 해, raw 디렉토리내에 이동할 뿐입니다.
debug/res/raw/charles_ca_pem
(2) 임베디드 인증서를 디버깅 할 때 참조하고 신뢰할 수있는 설정을 넣습니다.
<network-security-config>
의 <debug-overrides> 을 이용하는 것으로, 디버그시만 포함한 독자 증명서를 참조 & 신뢰한다고 하는 설정을 실시할 수 있습니다.
이 설정은 디버그 시에만 유효하며, 또한 Play 스토어에는 디버깅 가능한 앱은 공개할 수 없기 때문에 프로덕션 릴리스 버전 앱으로 의도하지 않고 Charles에서 HTTPS 트래픽이 들여다 버리는 사태를 방지할 수 있습니다.
debug Build Variants에서 다음과 같이 작성하면 RAW 리소스의 인증서를 참조하고 신뢰할 수있는 인증서로 신뢰 앵커에 추가 할 수 있습니다.
debug/res/xml/network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<certificates src="@raw/charles_ca_pem"/>
</trust-anchors>
</debug-overrides>
</network-security-config>
스토어 공개판의 main 변형의 network_security_config는 우선 하늘로 만들어 둡니다.
main/res/xml/network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
</network-security-config>
그런 다음 AndroidManifest.xml에서 이러한 network_security_config.xml을 참조하면 인증서 신뢰 설정이이 앱에서 활성화됩니다.
<application
android:name=".MyApp"
android:networkSecurityConfig="@xml/network_security_config"
>
...
</application>
앱 측에서의 준비는 이것뿐입니다.
그리고 Android 프록시 설정 화면에서 Charles를 사용하면 Charles에서 앱의 HTTPS 트래픽을 볼 수 있다고 생각합니다.
Reference
이 문제에 관하여(자체 인증서 설치가 허용되지 않는 Android 기기에서 앱 디버깅 중에 Charles에서 HTTPS 트래픽 분석을 수행하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/katz/items/d1beaeb69683948dc947
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Android 7.0부터 네트워크 보안 사양이 변경되어 매니페스트에서 명시적으로 트러스트 스토어를 지정하게 되었습니다.
이 기능을 활용하여 '디버그 버전 앱에 RAW 리소스로 포함된 Charles가 발급한 자체 인증서를 신뢰합니다'라는 설정을 넣으면 디버깅 시에만 Charles에서 HTTPS 트래픽을 탐색할 수 있습니다.
구체적인 기법
(1) Charles의 인증서를 디버깅 할 때만 앱에 포함
먼저 Build Variants를 활용하여 디버그 빌드 버전 앱 리소스에만 Charles의 인증서를 포함합니다.
Charles를 시작하고 메뉴에서 [Help] > [SSL Proxying] > [Save Charles Root Certificate]를 선택하고 Charles 인증서(PEM 형식)를 원하는 곳에 저장합니다.
그런 다음 Android Studio의 다음 경로에 PEM 파일을 설치하여 Raw 리소스로 Debug 빌드에만 포함합니다.
※Raw 자원에는 파일명의 제한이 있기 때문에, 앞의 순서로 보존한 PEM 파일의 확장자등을 제거해 「charles_ca_pem」이라고 하는 이름으로 해, raw 디렉토리내에 이동할 뿐입니다.
debug/res/raw/charles_ca_pem
(2) 임베디드 인증서를 디버깅 할 때 참조하고 신뢰할 수있는 설정을 넣습니다.
<network-security-config>
의 <debug-overrides> 을 이용하는 것으로, 디버그시만 포함한 독자 증명서를 참조 & 신뢰한다고 하는 설정을 실시할 수 있습니다.
이 설정은 디버그 시에만 유효하며, 또한 Play 스토어에는 디버깅 가능한 앱은 공개할 수 없기 때문에 프로덕션 릴리스 버전 앱으로 의도하지 않고 Charles에서 HTTPS 트래픽이 들여다 버리는 사태를 방지할 수 있습니다.
debug Build Variants에서 다음과 같이 작성하면 RAW 리소스의 인증서를 참조하고 신뢰할 수있는 인증서로 신뢰 앵커에 추가 할 수 있습니다.
debug/res/xml/network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<certificates src="@raw/charles_ca_pem"/>
</trust-anchors>
</debug-overrides>
</network-security-config>
스토어 공개판의 main 변형의 network_security_config는 우선 하늘로 만들어 둡니다.
main/res/xml/network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
</network-security-config>
그런 다음 AndroidManifest.xml에서 이러한 network_security_config.xml을 참조하면 인증서 신뢰 설정이이 앱에서 활성화됩니다.
<application
android:name=".MyApp"
android:networkSecurityConfig="@xml/network_security_config"
>
...
</application>
앱 측에서의 준비는 이것뿐입니다.
그리고 Android 프록시 설정 화면에서 Charles를 사용하면 Charles에서 앱의 HTTPS 트래픽을 볼 수 있다고 생각합니다.
Reference
이 문제에 관하여(자체 인증서 설치가 허용되지 않는 Android 기기에서 앱 디버깅 중에 Charles에서 HTTPS 트래픽 분석을 수행하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/katz/items/d1beaeb69683948dc947
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<certificates src="@raw/charles_ca_pem"/>
</trust-anchors>
</debug-overrides>
</network-security-config>
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
</network-security-config>
<application
android:name=".MyApp"
android:networkSecurityConfig="@xml/network_security_config"
>
...
</application>
Reference
이 문제에 관하여(자체 인증서 설치가 허용되지 않는 Android 기기에서 앱 디버깅 중에 Charles에서 HTTPS 트래픽 분석을 수행하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/katz/items/d1beaeb69683948dc947텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)