在Alamofire 3.1.2,XCode 7.1,iOS 9上,SSLHandshake失败,错误代码为-9801

Ara*_*ren 5 ssl swift alamofire ios9

我对Swift项目进行了以下升级

  1. iOS 9,XCode 7.1,El Captain
  2. Alamofire 1.3 - > 3.1.2

连接到自签名(测试)Web服务时出现以下错误.

错误信息

2015-11-12 21:46:13.045 [72695:5258083] CFNetwork SSLHandshake失败(-9801)2015-11-12 21:46:13.046 [72695:5258083] NSURLSession/NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9801)2015 -11-12 21:46:13.051 [错误] [DeviceInfo.swift:277] generateUserToken>处理generateUserToken()时出错:可选(错误域= NSURLErrorDomain代码= -1200"发生SSL错误并且安全连接到无法生成服务器."UserInfo = {_ kCFStreamErrorCodeKey = -9801,NSLocalizedRecoverySuggestion =您是否还要连接到服务器?,NSUnderlyingError = 0x7ffa99a0b8c0 {错误域= kCFErrorDomainCFNetwork代码= -1200"(null)"UserInfo = {_ kCFStreamPropertySSLClientCertificateState = 0 ,_kCFNetworkCFStreamSSLErrorOriginalValue = -9801,_kCFStreamErrorDomainKey = 3,_kCFStreamErrorCodeKey = -9801}},NSLocalizedDescription =发生SSL错误,无法建立与服务器的安全连接.

我已根据https://github.com/Alamofire/Alamofire#security实现了以下代码来禁用SSL验证

class CustomServerTrustPolicyManager: ServerTrustPolicyManager {
    override func serverTrustPolicyForHost(host: String) -> ServerTrustPolicy? {
        var policy: ServerTrustPolicy?
        policy = ServerTrustPolicy.DisableEvaluation
        return policy
    }
}

public class NetworkManager {

    static let sharedInstace = NetworkManager()

    let defaultManager : Manager = {

        let serverTrustPolicies: [String: ServerTrustPolicy] = [
            "myservice.com": .DisableEvaluation
        ]

        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        configuration.HTTPAdditionalHeaders = Alamofire.Manager.defaultHTTPHeaders

        return Alamofire.Manager(
            configuration: configuration,
            serverTrustPolicyManager: CustomServerTrustPolicyManager(policies: serverTrustPolicies)
        )

    }()

}
Run Code Online (Sandbox Code Playgroud)

另外,我在info.plist中添加了以下条目,但没有运气.

<dict>
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>myservice.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
                <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
                <key>NSRequiresCertificateTransparency</key>
                <true/>
            </dict>
        </dict>
    </dict>
</dict>
Run Code Online (Sandbox Code Playgroud)

有没有人使用Alamofire和iOS9成功连接自签名服务?请指教.