worklight.server.url 设置为 HTTPS 时无法登录 iOS

Can't login on iOS when worklight.server.url set to HTTPS

在构建 iOS Anywhere 应用程序时,如果我将 worklight.server.url 设置为 https 地址(哪个无关紧要,只是它是 https 地址),应用程序将无法连接到安装在设备上时的服务器,或者即使在设置中更改的任何服务器。当尝试登录时,它会显示加载消息,然后就失败了,没有错误。

如果我构建指向 http 地址的应用程序,然后在设置中将其更改为 https,它就可以正常工作。所以它似乎是特定于构建的应用程序的东西。

Android 和模拟器都工作正常。

检查 Worklight 服务器上的 ssl 证书配置。 https://www.ibm.com/support/knowledgecenter/en/SSZH4A_6.0.0/com.ibm.worklight.help.doc/admin/c_ssl_config.html

问题是由 ATS 设置引起的。使用 Forward Secrecy 时服务器出现故障。我使用 nscurl 对此进行了测试:收到以下结果:

TLSv1.2
ATS Dictionary:
{
    NSExceptionDomains =     {
        "*customer-details*.com" =         {
            NSExceptionMinimumTLSVersion = "TLSv1.2";
        };
    };
}
2018-03-12 12:40:12.277 nscurl[21636:8171556] CFNetwork SSLHandshake failed (-9824)
2018-03-12 12:40:12.278 nscurl[21636:8171556] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)
Result : FAIL
Error : Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={_kCFStreamErrorCodeKey=-9824, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, NSUnderlyingError=0x7fe06b62a410 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, _kCFNetworkCFStreamSSLErrorOriginalValue=-9824, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9824}}, NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., NSErrorFailingURLKey=https://*customer-details*.com/, NSErrorFailingURLStringKey=https://*customer-details*.com/, _kCFStreamErrorDomainKey=3}

我更新了 iphone 本机文件夹中的 info.plist 文件以匹配以下设置:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>*customer-details*.com</key>
        <dict>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TSLv1.2</string>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

在我的案例中,重要的设置是将 NSExceptionRequiresForwardSecrecy 设置为 false。

我最初忽略了这一点,因为 NSAllowsArbitraryLoads 设置为 true 但这似乎没有效果。