2017-12-06 8 views
0

우리는 SSL을 통해 당사의 웹 서버에 연결하는 응용 프로그램을 보유하고 있습니다. 이 잘 작동하지만 때로는 서버에 응용 프로그램 (우리는 로딩 요청을 URLSession를 사용)에 의해 전송 된 요청 중 일부는 URLSession에 (실패 대부분의 시간 :iOS11 및 kCFStreamErrorCodeKey = -9800에서 사용되는 TLS

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?

: 다음 오류 : didCompleteWithError : 작업

우리는 (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주의는 알고 있지만 여기서는 그렇지 않습니다. 그런 현상을 일으킬 수있는 아이디어가 있습니까? 아니면이 문제를 어떻게 해결할 수 있습니까?

감사합니다.

답변

0

현재이 앱에 대해 ATS 설정이 어떻게 구성되어 있습니까? 특히 NSExceptionMinimumTLSVersionNSExceptionRequiresForwardSecrecy에 어떤 가치를 사용합니까? NSExceptionMinimumTLSVersion을 TLSv1.2로 설정하면 iOS 클라이언트가 TLS 1.2 연결 만 사용하게됩니다. 실제로 문제가 해결되는지는 확실하지 않습니다. NSExceptionRequiresForwardSecrecy을 NO로 설정하면 iOS에서 허용되는 더 많은 암호화 제품군이 열리게됩니다.

나는 우리가 제어 할 수없는 간헐적 인 TLS 핸드 셰이크 실패를 유발할 수있는 iOS 11 SDK TLS 구현에 여전히 버그가 있다고 생각합니다. 지금 당장은 SSL/TLS 연결 오류가 발생할 때 완전히 실패하기 전에 이러한 연결 오류를 한 번 또는 두 번 다시 시도하고 서버 또는로드 중 하나에 잘못된 SSL 인증서가 설치되어있어 근본 원인을 계속 조사하십시오. balancers. 또한 iOS가 지원하지 않는 서버 측에서 TLS 구성을 제공하는 경우 유효하지 않거나 누락 된 암호 군일 수 있습니다.