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

Posted

技术标签:

【中文标题】Swift 3 使用无效的 XML 证书连接到服务器【英文标题】:Swift 3 Connect to server with invalid certificate for XML 【发布时间】:2017-05-03 11:56:04 【问题描述】:

我在连接到服务器时遇到了一些问题。我想简单地发送用户名和密码并从 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 Built-in Certificate Authority>",

我以前从未真正使用过 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】:

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

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

【讨论】:

以上是关于Swift 3 使用无效的 XML 证书连接到服务器的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire ssl 错误的证书 Swift

outlook2007,每次发邮件都提示“无法验证您连接到的服务器使用的安全证书。目标主要名称不正确”,求助?

Jenkins 无法使用带有自签名证书的 HTTPS (HTTP + SSL) 连接到 SonarQube 服务器

JS Fetch API 禁用 SSL 证书

如何使用 Alamofire 访问具有无效证书的本地 Https?

如何使用 MQTT 连接到 wss?