2017-01-21 1 views
1

내 iOS 앱에서 나는 iPads가 서로 통신 할 수있는 안전한 방법이 필요합니다.iPads 간의 안전한 통신

첫 번째 (안전하지 않은) 구현은 하나의 iPad가 웹 서버를 설정하고 다른 iPads가 일반적인 NSURLSession 요청을 통해 그와 통신한다는 것이 었습니다.

이제 Apple은 (App Transport Security를 ​​통해) HTTPS 사용에 대한 엄격함을 얻었으므로이 문제를 해결하고 iPads간에 보안 계층을 추가하려고합니다.

저는 GCDAsyncSocket (이미 웹 서버용으로 사용)에서 TLS 구현을 살펴 보았습니다. 하지만 이는 인증서 문제를 야기합니다. iPads는 LAN에서 오프라인으로 작업 할 수 있어야하고 IP 주소로 서로 연결할 수 있어야합니다.

ATS는 알려진 CA에서 발급 한 인증서입니다. 또한 고객이 iPads에 맞춤 CA 인증서를 설치하도록 강요 할 수는 없습니다. 내가 할 수 있다고하더라도, 그 iPads에 대한 인증서를 생성 아마 악몽이 될 것입니다.

그럼 내 다음 아이디어는 TLS와 비슷한 레이어로 자체 프로토콜을 구현하는 것입니다. 그러나 물론 TLS와 같이 잘 테스트 된 메커니즘을 사용하는 것을 선호합니다.

여러분 께 좋은 제안이 있기를 바랍니다. 나는 많은 사람들이 원격 서버에 의존하는 것 같지만 (그리고 나는 정말로 오프라인 기능이 필요하다.) 나는 이런 식으로 첫 번째 서버가 될 수없는 것처럼 느낀다.

최소 iOS 요구 사항은 iOS 9 (iPad 2 호환)입니다.

답변

0

IP 주소에 대한 연결에는 응용 프로그램 전송 보안이 적용되지 않습니다. 아이폰 OS 문서에서 :

Availability of ATS for Remote and Local Connections

앱 전송 보안 (ATS)

이 적용 공공의 호스트 이름을 만들어 연결합니다.
  • 규정되지 않은 호스트 이름
  • .local 최상위 도메인을 사용
  • 로컬 호스트 (TLD)
  • 를 해결

    • 인터넷 프로토콜 (IP) : 시스템에 만든 연결에 ATS 보호를 제공하지 않습니다

      정규화되지 않은 호스트 이름이나 .local 도메인에 연결하려면 NSAllowsLocalNetworking 키의 값을 YES으로 설정해야합니다. 이 ATS 요구 사항을 준수 할 수있는 방식으로 TLS를 사용하는 불가능을 때문에

    이 큰 부분입니다. 모든 권한있는 CA는 사설 IP 주소 또는 호스트 이름에 대한 인증서 발급을 거부하고 키가 손상되었다는 것을 발견하면 인증서를 폐기합니다 (예 : 모바일 응용 프로그램에 배포 됨).

    자신의 암호화 작성과 관련하여 :하지 마십시오. 설명하는 것처럼 피어 - 투 - 피어 구성에서 보안을 처리하는 것은 복잡합니다. 더 중요한 것은 응용 프로그램에 자신의 암호화 코드를 포함 시키면 미국 이외의 지역에 배포하는 것이 더 복잡해집니다. 귀하의 통신을 보호하기 위해 무선 네트워크의 보안에 의존하는 것이 가장 좋습니다.

    +0

    답장을 보내 주셔서 감사합니다. Wi-Fi 보안에만 의존하지 않는 것이 좋습니다. 많은 고객들이 Wi-Fi를 게스트와 공유하는 것이 좋다고 판단합니다. 맞춤 CA를 설정하고 iPads 인증서를 할당하고 호스트 이름 유효성 검사를 우회 (및 TLS 사용) 할 수 있습니다. 그러나 ATS는 iOS 9에서 IP 주소에 적용됩니다. Apple은 iOS 10에서 ATS로 발생한 사고를 수정했는데 (예를 들어 작성한 NSAllowsLocalNetworking 키를 사용하여), 이로 인해 iOS 9에 약간의 골칫거리가 남았습니다. – Zyphrax

    +0

    설명서가 iOS 10 용인지 확인할 수 있습니다. iOS 9에서는 IP 주소에 대한 HTTP 요청이 ATS에 의해 차단되었습니다. – Zyphrax