2016-10-20 45 views
1

我正在使用一個應用程序,用戶可以在其中輸入應用程序可以連接的任意URL。目標服務器可以是http或https。我在應用程序info.plist中添加了以下值。同時支持http調用和ATS

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 

由於上述配置HTTP調用和安全的服務器工作正常,即使有,我的安全服務器遇到任何安全服務器的要求,即缺少TLS1.2,向前保密等

我要確保如果我的安全服務器上缺少任何內容,iOS文檔中提到的所有要求(即TLS1.2,前向保密和我的請求)都將失敗。如果我的服務器未正確配置SSL要求(TLS1.2,正向保密),我使用以下配置並且請求失敗。

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <false/> 
</dict> 

使用上述配置後,我無法連接http服務器。如果安全服務器配置不正確,是否有任何方法可以與http服務器連接,請求失敗。

注意:我的應用程序可以連接到用戶輸入的任何服務器。我無法使用NSExceptionDomains配置來指定服務器。

回答

1

NSExceptionDomains不只是允許在某些領域不太安全設置,您也可以將它用於相反的情況下,例如允許任意的將默認加載到像你這樣,然後補充說,需要更多的安全設置例外:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>example.com</key> 
     <dict> 
      <key>NSIncludesSubdomains</key> 
      <true/> 
      <key>NSExceptionAllowsInsecureHTTPLoads</key> 
      <false/> 
      <key>NSExceptionMinimumTLSVersion</key> 
      <string>TLSv1.2</string> 
      <key>NSExceptionRequiresForwardSecrecy</key> 
      <true/> 
     </dict> 
    </dict> 
</dict> 
+0

感謝您的回覆。假設有n臺服務器,我不提前知道域名。新服務器將在稍後添加。僅當我知道服務器地址時,上述方案才起作用。 – user1799469

+0

要做到這一點,唯一的方法就是在代碼中執行ATS檢查,同時關閉iOS提供的ATS檢查功能。那麼該應用程序如何知道是否強制執行A​​TS與何時忽略任何錯誤?從服務器源下載的域列表? – wottle

+0

你不能吃你的蛋糕,也不能吃。 –