Swift / XCode 7:如何临时设置使用TSL< 1.2

时间:2015-09-21 16:02:01

标签: ios swift ssl openssl xcode7

等待OS X El Capitan(以便我可以获得TSL 1.2)我启用了我的MAMP服务器以使用SSL / TSL。我的iOS应用程序使用如下所示的URL,如果在浏览器上输入,则可正常工作:

static var webServerLoginURL = "https://localhost:443/excogitoweb/mobile/loginM.php"
static var webServerGetUserTasks = "https://localhost:443/excogitoweb/mobile/handleTasks.php"
static var webServerGetUsers = "https://localhost:443/excogitoweb/mobile/handleUsers.php"
static var webServerGetProjects = "https://localhost:443/excogitoweb/mobile/handleProjects.php"

执行如下步骤:

openssl version

在终端上,我得到:

OpenSSL 1.0.2d 9 Jul 2015

所以我编辑了我的plist文件,添加了以下内容:

<key>NSAppTransportSecurity</key>
    <dict> <key>NSExceptionDomains</key>
        <dict> <key>localhost</key> <dict> <!--Include to allow subdomains--> <key>NSIncludesSubdomains</key>
                <true/> <!--Include to allow insecure HTTP requests--> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                        <true/> <!--Include to specify minimum TLS version--> <key>NSTemporaryExceptionMinimumTLSVersion</key>
                                <string>TLSv1.0</string> </dict> </dict>    </dict>

但是,在运行应用程序时,我仍然得到:

2015-09-21 17:54:17.491 ExcogitoWeb[83336:525096] CFNetwork SSLHandshake failed (-9824)
2015-09-21 17:54:17.497 ExcogitoWeb[83336:525096] CFNetwork SSLHandshake failed (-9824)
2015-09-21 17:54:17.500 ExcogitoWeb[83336:525096] CFNetwork SSLHandshake failed (-9824)
2015-09-21 17:54:17.500 ExcogitoWeb[83336:525096] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)

结果是来自数据库的数据为零并且应用程序崩溃。我想知道为什么它仍然拒绝工作,即使SSL / TSL版本较低......你能帮忙吗?

1 个答案:

答案 0 :(得分:1)

据我所知,当您使用NSURLSession建立网络时,您只能设置协议协商后将使用的最小/最大协议版本,您可以在NSURLSessionConfiguration对象中设置它属性TLSMinimumSupportedProtocol,可以使用属性TLSMaximumSupportedProtocol设置最大版本。

请参阅NSURLSessionConfiguration

修改

看来,有一种方法可以在较低级别的API中限制接受的TLS协议版本: iOS 5 and TLS 1.2 Interoperability Issues (虽然它有点老了)