2016-02-05 36 views
0

我試圖限制我的應用程序與運行任何版本的1.2之前的TLS的服務器進行通信。從文檔,看來我應該可以通過調用SSLSetProtocolVersionMin要做到這一點,所以我已經做到了:如何防止我的應用在iOS 8上從TLSv1.2降級?

SSLContextRef context = SSLCreateContext(NULL, kSSLClientSide, kSSLStreamType); 
SSLSetProtocolVersionMax(context, kTLSProtocol12); 
SSLSetProtocolVersionMin(context, kTLSProtocol12); 

我已驗證調用SSLSetProtocolVersionMin不返回一個錯誤,但我仍然能連接到協商到SSLv3的服務器。

SSLSetProtocolVersionMax似乎正常工作,因爲當我將它設置爲TLSv1.1並且服務器僅限於TLSv1.2時,我無法連接到服務器。

看來,這在iOS 9上的預期效果。有誰知道這是不支持在iOS 8,或者如果有其他步驟,我需要採取?

+0

可能是iOS 8中的一個bug。我試圖通過只允許TLSv1.2使用的強密碼(請參閱'SSLSetEnabledCiphers')來解決這個問題 - 您可以從ATS規範中獲得一個列表。還有一個'SSLSetSessionStrengthPolicy'函數,但似乎不推薦使用。 –

回答

0

可以配置的iOS只連接到iOS的會議中使用蘋果的新應用傳輸安全性最低TLS版本的服務器9.

您可以像下面這樣你的Info.plist文件中添加代碼:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>mydomain.com</key> 
     <dict> 
      <key>NSThirdPartyExceptionMinimumTLSVersion</key> 
      <string>1.2<string/> 
     </dict> 
    </dict> 
</dict> 

您可以查看WWDC video

編輯:

我看你添加到您的問題聲明,你需要做到這一點在iOS 8,不具有ATS。但希望這個答案能夠幫助那些使用iOS 9並且需要這樣做的人,因爲原來的問題不包括這個限制。

相關問題