본문 바로가기
개발/android

http 프로토콜 접속 시 예외발생 (Cleartext HTTP traffic to [url address] not permitted)

by 가시죠 2021. 1. 18.
반응형

안드로이드에서 jsoup로 특정 url을 http로 접속 시 오류가 발생하였다.

원인은 안드로이드9(APL Lv 28) 부터 강화된 네트워크 보안정책으로 인한 오류.

예외 처리를 위한 3가지 방법

1. AndroidManifest.xml 파일의 <application> 부분에 android:usesCleartextTraffic="true" 로 설정

이 flag를 설정하게 되면 모든 cleartext 트래픽은 허용처리가 됩니다.

 

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

res/xml/network_security_config.xml 아래와 같이 추가

<domain includeSubdomains="true">xxx.com</domain> 등록된 도메인은 https 가 아니어도 허용.

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

아래와 같이 추가할 경우는 secure.xxx.com 도메인만 항상 HTTPS를 통해서만 수행

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

그 다음에 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로 설정

참고로 앱이 설치되면 이 속성값을 더 높은 값으로 만 업데이트 할 수 있다고 함.

이 속성값을 다운 그레이드하려면 앱을 제거후 재설치 해야 함.

 

반응형

댓글