Swift 3使用无效的XML证书连接到服务器

时间:2017-05-03 11:56:04

标签: ios swift ssl nsurlsession

我遇到了与服务器连接的一些问题。我想简单地发送用户名和密码,并从XML文件中获取一些数据。

    let loginString = String(format: "%@:%@", username, password)
    let loginData = loginString.data(using: String.Encoding.utf8)!
    let base64LoginString = loginData.base64EncodedString()

    let baseUrl = "xxxxxx"
    let request = NSMutableURLRequest(url: NSURL(string: baseUrl)! as URL)
    request.httpMethod = "POST"
    request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")
    let session = URLSession.shared
    request.httpMethod = "GET"

    var err: NSError?

    let task = session.dataTask(with: request as URLRequest) {
        (data, response, error) in

        if data == nil {
            print("dataTaskWithRequest error: \(error)")
            return
        }

        let xml = SWXMLHash.parse(data!)
        print(xml["mobile_devices"]["mobile_device"]["serial_number"].element?.text)

        DispatchQueue.main.async(execute: {
            // use main thread for UI updates
        })

    }
    task.resume()

当我运行它时,我收到以下错误:

  

nw_coretls_callback_handshake_message_block_invoke_3 tls_handshake_continue:[ - 9812]   2017-05-04 08:20:45.311 xxxx [23410:4428038] NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9813)

     

NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9813)   dataTaskWithRequest错误:可选(错误域= NSURLErrorDomain代码= -1202“此服务器的证书无效。您可能正在连接到假装为”xxxxxxx“的服务器,这可能会使您的机密信息面临风险。”UserInfo = { NSURLErrorFailingURLPeerTrustErrorKey =,NSLocalizedRecoverySuggestion =你想连接到服务器吗?_kCFStreamErrorDomainKey = 3,_kCFStreamErrorCodeKey = -9813,NSErrorPeerCertificateChainKey =(“cert(0x7f88d8834000)s:xxxxxxx JSS内置证书颁发机构>”,

我以前从未对API和事情做过任何事情,所以我正在学习。以前我必须编辑plist文件以允许连接,这解决了我之前遇到的问题。我已经走到了这一步,但我不确定如何克服它。

我看到了这个:Connect to a Server with Invalid Certificate using NSURLSession (swift2,xcode7,ios9)  但它打破了

let session = URLSession.shared 

在我的代码中排成一行。

我也见过这个,但我不确定如何使用它:

Swift: How to request a URL with a self-signed certificate?

1 个答案:

答案 0 :(得分:0)

好。我找到了适合自己情况的解决方案。我在这里发布了它:Swift 3 NSURLSession/NSURLConnection HTTP load failed when connecting to a site with authentication

注意:这是一个安全问题,所以请不要这样做