내용 보기

작성자

관리자 (IP : 172.17.0.1)

날짜

2020-07-09 08:11

제목

[Android] Http 통신시 Cleartext HTTP traffic to ,,, not permitted 오류 발생시


안드로이드9(APL Lv 28) 부터 강화된 네트워크 보안정책으로 인해 HTTPS통신이 아닌 HTTP통신시 위 오류가 발생 된다.
위 문제를 해결하기 위해 다음과 같은 방법으로 해결 할 수 있다.

KakaoBot App에서 자체 Node.js서버와 통신시 위 오류가 발생 되었는데
1번 해결방법을 통해 해결 되었다.

1. AndroidManifest.xml 파일의 <application> 부분에 android:usesCleartextTraffic="true" 로 설정
cleartext HTTP와 같은 cleartext 네트워크 트래픽을 사용할지 여부를 나타내는 flag로 이 플래그가 flase 로 되어 있으면, 플랫폼 구성 요소 (예 : HTTP 및 FTP 스택, DownloadManager, MediaPlayer)는 일반 텍스트 트래픽 사용에 대한 앱의 요청을 거부하게 됩니다.
이 flag를 설정하게 되면 모든 cleartext 트래픽은 허용처리가 됩니다.

2. networkSecurityConfig 파일을 생성하고, AndroidManifest 에 등록

res/xml/network_security_config.xml 아래와 같이 추가합니다.
<domain includeSubdomains="true">ebookfrenzy.com</domain> 등록된 도메인은 https 가 아니어도 허용이 됩니다.

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">ebookfrenzy.com</domain>
    </domain-config>
</network-security-config>
cs

그리고, 아래와 같이 추가할 경우는 secure.example.com 도메인만 항상 HTTPS를 통해서만 수행하게 됩니다.

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
        <domain includeSubdomains="true">secure.example.com</domain>
    </domain-config>
</network-security-config>
cs

그 다음에 AndroidManifest.xml 파일의 <application> 부분에 networkSecurityConfig속성 추가
<application 
android:networkSecurityConfig="@xml/network_security_config" 
~~~ >
</application>

3.Android Manifest.xml 파일에서 targetSandboxVersion를 1로 설정

SandboxVersion 속성값이 높을수록 보안 수준이 높아지며, 2일 경우 usesCleartextTraffic의 기본값은 false 입니다.
따라서, 이 속성의 값을 1로 변경하면 문제를 해결할 수 있습니다.
다만 Android 8.0 (API 26) 이상을 타겟팅하는 Android Instant Apps의 경우 이 속성을 2로 설정해야합니다.

참고로 앱이 설치되면 이 속성값을 더 높은 값으로 만 업데이트 할 수 있다고합니다.
이 속성값을 다운 그레이드하려면 앱을 제거후 재설치 해야합니다.

출처1

https://developside.tistory.com/85

출처2