gpt4 book ai didi

ios - 在 iOS 中执行 SSL 请求

转载 作者:太空宇宙 更新时间:2023-11-03 14:44:01 25 4
gpt4 key购买 nike

我正在尝试将 Google Translate API 用于我正在构建的简单 iOS 应用程序。我基本上一直在尝试为此请求使用 SSL。

根据 Google Translate API, it supports SSL .所以现在我的问题是我该怎么做?这是我现在正在尝试的一些代码。我有一个来自翻译 API 的 API。

func translateRequest(text: String, fromLang: String, toLang: String) {
let httpsURL = NSURL(string: "https://www.googleapis.com/language/translate/v2?key=<MYAPIKEYHERE>&source=\(fromLang)&target=\(toLang)&q=\(text)&format=text")
let sessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
sessionConfiguration.timeoutIntervalForRequest = NSTimeInterval(10)
let session = NSURLSession(configuration: sessionConfiguration, delegate: self, delegateQueue: nil)
let translateTask = session.dataTaskWithURL(httpsURL!, completionHandler: completionHandlerTranslate)
translateTask.resume()
}

func completionHandlerTranslate(dataOpt: NSData?, responseOpt: NSURLResponse?, errorOpt: NSError?) {
// A helper function to do something with responses
}

现在因为我使用的是 NSURLSession(而不是 NSURLConnection),所以我的 Controller 也由 NSURLSessionDelegate 控制。根据Apple's docs (在 Configuring Authentication 部分),对于 NSURLSession 我只需要实现 didReceiveChallenge 函数。函数的签名是:

func URLSession(session: NSURLSession, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void) {

}

但是我不知道里面应该放什么。我见过很多人试图验证服务器等的例子,但我仍然感到困惑。

这是我的问题:

  1. SSL 用于加密数据,那么我需要在 didReceiveChallenge 中做什么才能在客户端和服务器之间进行加密通信?
  2. 如何确保 didReceiveChallenge 拒绝所有其他证书(例如放置像 CharlesProxy 这样的代理并尝试嗅探数据)?

最佳答案

阻止使用 Charles Proxy 通常不是一个好主意,因为某人使用它来对付其他人是不切实际的。它之所以有效,是因为用户已明确安装证书以告诉操作系统信任 Charles Proxy 生成的假证书。用户通常喜欢能够看到您的应用在他们自己的设备上发送了哪些数据,阻止他们这样做可能会让人觉得您的应用正在做一些不正当的事情。

话虽如此,如果您真的想要阻止 HTTPS 代理工作,您可以采用键固定。您不信任证书,而是编写一个 didReceiveChallenge 处理程序,请求默认处理除服务器信任之外的所有内容。然后,对于服务器信任:

  • 从挑战对象中提取建议的凭证。
  • 从凭证的证书链中提取第一个(叶)证书; IIRC,这是在索引 0 处,但不要引用我的话。
  • 从证书中提取公钥。
  • 在应用程序包中的某处添加服务器公钥的副本。
  • 比较两个公钥。如果它们匹配,则以告诉它使用提供的证书的方式返回/调用回调。
  • 如果不匹配,则取消整个连接/任务。

无论如何,这是基本的想法。进行此更改后,嗅探流量的唯一方法是替换应用程序包中的公钥并重新签署应用程序。

关于ios - 在 iOS 中执行 SSL 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40706512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com