我正在使用一个应用程序,用户可以在其中输入我的应用程序可以连接的任意URL。目标服务器可以是http或https。我在我的应用程序info.plist中添加了以下值。
<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配置来指定服务器。
答案 0 :(得分: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>