2017-09-15 3 views
0

Mac 10.6 sdk에 대해 구축 된 기존 앱이 있습니다. 웹 전화를 걸려면 NSURLMutableRequestNSURLConnection을 사용하고 있습니다. Wireshark를 사용하여, 10.9 - 10.11.2에서 TLSv1에 대한 모든 호출이 이루어진다는 것을 알았습니다. 10.11.6 이상 (또한 10.13 베타)TLSv1.2에서 이루어집니다.NSURLConnection을 사용할 때 Mac OS 10.9의 기본 SSLLevel

CFURLRequestSetSSLProperties (dlsym)을 사용하여 코드를 TLSv1.2로 변경했습니다. 나는 kCFStreamSSLLevel을 "kCFStreamSocketSecurityLevelTLSv1_2"으로 설정했습니다. 이 후 나는 TLSv1.2에서 전화가 걸리게된다는 것을 알 수있다.

kCFStreamSSLLevel애플의 문서에서 기본적으로

, 스트림의 보안 수준은 kCFStreamSocketSecurityLevelNegotiatedSSL입니다.

kCFStreamSocketSecurityLevelNegotiatedSSL에서

:

는 협상 할 수있는 가장 높은 수준의 보안 프로토콜 소켓 스트림에 대한 보안 프로토콜로 설정하도록 지정합니다.

TLSv1.2가 10.9에서 지원된다는 것을 알고 있습니다. 테스트로, 나는 kCFStreamSocketSecurityLevelNegotiatedSSLkCFStreamSSLLevel을 설정하고 10.9에 여전히 호출 TLSv1의했다.

나는이 개 질문이 : 통화 10.9-10.11.2에 대한 TLSv1의에 만든 도착 이유는 무엇

  1. ? 자동으로 최상위 버전 즉, TLSv1.2을 자동으로 선택하면 안됩니다.

  2. kCFStreamSocketSecurityLevelTLSv1_2를 사용하여,이 서버가 TLSv1.2을 지원하지 않는 경우 버전을 낮출 폴백 (fallback) 또는 전화 단순히 실패 할 것입니까? 두 세트, 스트림 속성 값과 작업을 복사

kCFStreamSocketSecurityLevelNegotiatedSSL

토론 : 나는이 동안 검사를 발견했다. 버전을 낮추기 위해 TLS 또는 SSL을 사용할 것을 나타냅니다. 이것은 인스턴스에 대해 HTTPS가 수행하는 작업입니다.

kCFStreamSocketSecurityLevelTLSv1_2 또는 kCFStreamSocketSecurityLevelTLSv1에 대한 이러한 선언이 없습니다. 그래서 그들은 버전을 낮추기 위해 대체 될 것인가 아닌가?

답변

1

IIRC 버전 특정 상수는 특정 버전을 설정하며 다른 버전은 협상하지 않습니다. 대조적으로 협상은 보안 문제 (예 : SSLv3)로 인해 Apple에서 블랙리스트에 올리지 않은 버전을 협상 할 수 있도록합니다.

그러므로 내 버전에서는 SSL/TLS의 최신 버전을 사용할 수없는 호스트를 지원하기 위해 특정 버전을 사용해야하는 경우가 아니라면 항상 클라이언트 측에서 협상을 사용하는 것이 좋습니다. 서버가 제대로 협상을 지원하지 않는 경우, 그리고 가장 최신 버전 만 받아들이도록 (또는 오래된 클라이언트를 지원하는 데 필요한 경우 약간 더 오래된) 서버를 항상 설정하는 것입니다.

이 접근법의 장점은 Apple 코드가 Apple에서 새 버전을 추가하고 이전 버전을 더 이상 사용하지 않으므로 변경하지 않아도되고 서버가 직접 제어 할 수 있으므로 서버를 강제 실행하지 않고 언제든지 변경할 수 있다는 것입니다 사용자가 소프트웨어 업데이트를 다운로드해야합니다.

관련 문제