快速发送发帖请求3(自签名证书问题)

RSo*_*234 2 ios swift3

我正在尝试将用户选择的一些数据发送到位于不同网络的LAMP服务器上的mysql数据库。最近,我在自己的计算机上下载了服务器,一切都很好。应用程序中的操作发送到服务器中的php文件,然后php当然将其发送到mysql数据库。最近,我获得了我们将需要使用的服务器的访问权限。现在,当我尝试做同样的事情时,我收到一条错误消息,指出此服务器的证书无效。我知道以前我使用的是HTTP,现在需要使用https,但是我不清楚如何更改它以使其正常工作。我在此处看到有关如何执行此操作的许多不同答复,但通常会用诸如“这是一种解决方法”或“该应用可能被拒绝”之类的评论来反驳。

这是我当前的功能:

func sendToServer(firstEntry: String, secondEntry: String, serverAddr: String){

let uid = firstEntry
let gender = secondEntry
let request = NSMutableURLRequest(url: NSURL(string: serverAddr)! as URL)
request.httpMethod = "POST"
let postString = "UID=\(uid)&Gender=\(gender)"
request.httpBody = postString.data(using: String.Encoding.utf8)

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

    if error != nil {
        print("error=\(error)")
        return
    }

    print("response = \(response)")

    let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
    print("responseString = \(responseString)")
}
task.resume()
Run Code Online (Sandbox Code Playgroud)

}

我读了一些东西,例如不使用共享来使它正常工作,但是我对此仍然不太清楚。我要做的就是将这些数据发送到位于服务器上的php。数据本身并不敏感,只是性别而已,是或否答案被发送到数据库。但是,在没有影响用户体验的攻击以及因此而不会被拒绝的攻击方面,我将需要足够的安全性。在这里的任何帮助将不胜感激。谢谢

Sas*_*vic 6

您需要做两件事:

  1. 将域异常添加到您的plist文件中,我将带您到此stackoverflow帖子如何在iOS 9中启用应用传输安全性的情况下加载HTTP URL?

  2. 您需要实现URLSessionDelegate。这是您的https请求的最低要求。您将在URLSessionTaskDelegate上找到几乎准确的方法,该方法用于任务特定的身份验证,而该方法用于会话范围的身份验证。从代码中可以看到,关键部分是URLCredential(trust:Challenge.protectionSpace.serverTrust!),您在其中指定您信任该服务器。

    class RequestDelegate: NSObject, URLSessionDelegate {

        public func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Swift.Void) {
            completionHandler(URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后,您只需将URLSession(configuration: URLSessionConfiguration.default, delegate: RequestDelegate(), delegateQueue: nil)您的代表作为参数

经过测试并在IOS 10上工作。

希望这会有所帮助,这实际上是我关于stackoverflow的第一篇文章,所以您好。