티스토리 뷰

iOS

[iOS] App Transport Security

희철 2022. 7. 21. 01:35

오픈소스 Kingfisher에서는 이미지 url을 이용해 이미지를 처리한다.

 

 

근데 주소가 https로 시작하는 이미지는 제대로 처리했지만, http로 시작하는 이미지는 처리하지 못했다.

http로 시작하는 이미지 url을 이용했을때, 시뮬레이터를 보면 어떠한 이미지도 보이지 않는 것을 확인할 수 있다.

 

 

반면, https로 시작하는 이미지 url을 넣어주면 제대로 이미지가 보인다.

 

 

위의 결과처럼 http로 시작하는 url을 처리하지 못하는 이유는 ATS(App Transport Security)때문이다.

 

 

공식문서에 나온 내용을 보자.

 

"On Apple platforms, a networking security feature called App Transport Security (ATS) improves privacy and data integrity for all apps and app extensions. It does this by requiring that network connections made by your app are secured by the Transport Layer Security (TLS) protocol using reliable certificates and ciphers. ATS blocks connections that don’t meet minimum security requirements."

 

"Apple 플랫폼에서 ATS(App Transport Security)는 모든 앱 및 앱 확장에 대한 프라이버시 및 데이터 무결성을 향상시킵니다. 앱에서 만든 네트워크 연결이 신뢰할 수 있는 인증서 및 암호를 사용하여 TLS(Transport Layer Security) 프로토콜로 보호되도록 요구함으로써 이 작업을 수행합니다. ATS는 최소 보안 요구 사항을 충족하지 않는 연결을 차단합니다."

 

 

간단히 말해서 앱과 웹 사이의 통신 보안 향상을 위해 ATS가 이용된다라고 이해하면 될 것 같다.

 

 

그러면 http통신을 아예 못하느냐. 그건 아니다.

 

 

하지만 공식문서에서 앱의 보안을 약하게 하는 것보다 서버를 수정하는 것을 추천하고 있다. 

 

 

그럼에도 불구하고 어떠한 이유로 통신이 불가피한 경우를 대비하여 두 가지 정도의 방법을 제공해주고있다.

 

 

먼저, 모든 네트워크 연결에서 ATS를 비활성화 시키는 방법이다.

Info.plist에서 App Transport Security Settings를 추가하고 Allow Arbitrary Loads의 값을 YES로 바꿔주면된다.

 

위와 같이 설정하고 다시 http url을 이용해 이미지를 가져오니 정상적으로 보이는 것을 확인할 수 있다.

 

 

첫 번째 방법보다 조금 더 보안성을 높이기 위해 예외 범위를 줄이는 방법도 있다. 

 

 

전체 네트워크 연결에서 ATS를 비활성화 하는 것이 아니라 하나의 도메인에서만 비활성화 시키는 방법이다.

위와 같이 제외할 도메인을 설정하고 NSExceptionAllowsInsecureHTTPLoads를 추가해줌으로써 다른 도메인에서는 정상적으로 ATS를 유지할 수 있다.

 

마찬가지로 이미지가 잘 가져와지는 것을 볼 수 있다.

 

 

위의 두 가지 방법으로 http통신을 가능하게 할 수는 있지만, 공식문서에 나와있듯이 서버를 수정하는 것이 더 좋은 방법인 것을 명심해야겠다.

'iOS' 카테고리의 다른 글

[iOS] UITextView에 Placeholder만들기  (0) 2022.07.28
[iOS] Xcode Tip  (0) 2022.07.26
[iOS] Launch Screen Animation(런치스크린 애니메이션)  (0) 2022.07.13
[iOS] Image Rendering Mode  (0) 2022.07.10
[iOS] Xcode에서 GitHub사용하기  (0) 2022.07.09
댓글
최근에 올라온 글
Total
Today
Yesterday