ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • iOS) Network -ATS
    iOS 2020. 9. 24. 22:56

    App Transport Security

    iOS 어플리케이션을 만들다 보면 http 통신을 하게 될 때가 있다.
    이때마다 App Transport Security policy 어쩌고 하면서 컴파일 에러가 나는데, 구글링 해보면 info.plist에 가서 App Transport Security Setting을 바꿔주고 어쩌고 하라고 한다. 항상 따라만 했지 정확하게 왜 안되는지 어떻게 안되는지 몰랐기 때문에 이번 기회에 정리 해보려고 한다.

    앱 심사에 중요한 역할을 한다.

    ATS는 iOS의 보안기능이다.
    TLS, AES, SHA-2를 사용한다.

    HTTP 통신은 데이터를 일반 텍스트로 전달하고, HTTPS는 데이터를 암호화하여 전달한다.

    따라서 ATS는 기본적으로 HTTP를 허용하지 않는다.

    info.plist의 proterty list key를 보자

    • NSAllowsArbitraryLoads
      최악이다. 모든 ATS 보안을 무효화 시키고 검증되지 않은 모든 도메인과 통신 할 수 있다.
      절대 앱 심사를 통과 할 수 없다.
      이건 혼자 개발할 때나 사용하자.

    • NSAllowsArbitraryLoadsForMedia
      미디어 요청에 대한 안전하지 연결을 허용한다.
      true시 미디어에 대한 http 요청이 허용 가능하다.

    • NSAllowsArbitratyLoadsInWebContent
      웹 뷰에서 http 요청을 허용 할 때 사용한다.

    • NSAllowsLocalNetworking
      이건 로컬 네트워크니까 사용해도 될듯 하다.

    ATS보안을 무력!화 시키는 ATPS를 무효화 하는건 권장하지 않는다.
    굳이 HTTP통신을 하겠다면 Exception Domains를 추가 해서 신뢰할 수 있는 도메인만 허용하여 사용하자.

    도메인 예외처리는 딕셔너리 형태로 저장된다.

    Boolean 형태로 되어 있으며, 필요 할때 허용하여 사용한다.

    • NSIncludesSubdomains
      해당 도메인의 모든 서브 도메인을 허용한다.
    • NSExceptionAllowInsecureHTTPLoads
      특정 도메인을 허용한다.
      만약 http 통신을 허용한다면 여기까지가 좋겠다..
    • NSExceptionMinimumTLSVersion
      이름이 지정된 도메인의 네트워크 연결에 대한 최소 TLS 버전을 지정하여 보안 수준이 낮은 이전 버전의 전송 계층 보안을 사용한 연결을 허용하십시오.
      Specifies the minimum TLS version for network connections for the named domain, allowing connection using an older, less secure version of Transport Layer Security.
    • NSExceptionRequiresForwardSecrecy
      NO로 설정할 경우, 정해진 도메인에 대해 PFS(Perfect Forward Secrecy)를 지원하지 않는 TLS 암호를 허용한다. 디폴트 값은 YES 이다.
    • NSRequiresCertificateTransparency
      YES로 설정한 경우, 명명된 도메인의 서버 인증서에 대해 서명된 유효한 인증서 투명성 타임스탬프가 필요하다. 디폴트값은 NO 이다.

    위의 보안이 너무 빡빡하다? HTTPS를 사용하자.

    댓글

Designed by Tistory.