우리는 SSL을 통해 당사의 웹 서버에 연결하는 응용 프로그램을 보유하고 있습니다. 이 잘 작동하지만 때로는 서버에 응용 프로그램 (우리는 로딩 요청을 URLSession를 사용)에 의해 전송 된 요청 중 일부는 URLSession에 (실패 대부분의 시간 :iOS11 및 kCFStreamErrorCodeKey = -9800에서 사용되는 TLS
: 다음 오류 : didCompleteWithError : 작업Error Domain=SyncCPConnectionErrorDomain Code=12 "(null)" UserInfo={ErrorMessageKey=Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={_kCFStreamErrorCodeKey=-9800, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?
우리는 (TCP 덤프를 사용) 문제를 디버깅을 시작하고 다음 보았다
때때로 (우리는이에 대한 제어를 가지고 있지 않기 때문에 나는 추측 OS 레벨) 응용 프로그램이 SSL 핸드 쉐이크에 제공1.0 모두 TLS를 최소 및 최대 SSL 버전으로 표시되고 핸드 셰이크가 성공적으로 완료됩니다.
다른 연결에서 응용 프로그램은 TLS 1.0을 최소 버전으로, TLS 1.2를 최대 버전으로 제공합니다. 그런 다음 핸드 셰이크가 버전 TLS 1.2에서 성공적으로 끝납니다.
때때로 전체 핸드 셰이크가 TLS 1.0에서 수행되는 반면, 재개 된 핸드 셰이크는 TLS 1.2에서 수행되는 것으로 나타났습니다.
체크섬 알고리즘은 버전마다 다르므로 클라이언트가 혼동을 일으키거나 적어도 체크섬 정의와 관련하여 서버와 동의하지 않을 수 있습니다. 그런 다음 클라이언트 (응용 프로그램)는 "Illegal Params"치명적인 경고로 연결을 닫습니다. 이 시점에서 앱 연결 중 하나에서 -9800 SSL 오류가 발생한다고 가정합니다.
우리 서버는 TLS 1.2를 선호하지만 TLS 버전도 1.0으로 지원합니다.
우리는 우리의 응용 프로그램 앱 운송 보안 (ATS)에서 구성한 처음에는: NSAllowsArbitraryLoads = 사실
우리는 그것을 제거하고 항상 TLS 1.2을 사용하는 응용 프로그램을 강제로 생각하지만, 그것을 도움이되지 않았다. iOS11에서는 애플리케이션이 TLS 1.2에서만 작동해야한다는 Apple주의는 알고 있지만 여기서는 그렇지 않습니다. 그런 현상을 일으킬 수있는 아이디어가 있습니까? 아니면이 문제를 어떻게 해결할 수 있습니까?
감사합니다.