该服务器的证书对于 swift 3 上的自签名证书无效

2024-04-03

我正在使用 swift 3 并第一次访问网络服务。我的 Web 服务通过 HTTPS 运行,我想在适当的加密情况下进行测试。

到目前为止,这是我的代码:

    let config = URLSessionConfiguration.default // Session Configuration
    let session = URLSession(configuration: config) // Load configuration into Session
    let url = URL(string: webService.getLoginUrl())!

    let task = session.dataTask(with: url, completionHandler: {
        (data, response, error) in

        if error == nil {
            do {
                if let json =
                    try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any]{
                    //Implement your logic
                    print(json)
                }
            } catch {
                print("error in JSONSerialization")
            }
        } else {
            print(error!.localizedDescription)
        }

    })
    task.resume()

当我对自签名的测试服务器运行此命令时,我得到:

The certificate for this server is invalid. You might be connecting to a server that is pretending to be “10.0.0.51” which could put your confidential information at risk.

所以我想做的是在测试时接受所有证书,但不在生产中接受。

我发现了几个网站,例如:

http://www.byteblocks.com/Post/Use-self-signed-SSL-certificate-in-iOS-application http://www.byteblocks.com/Post/Use-self-signed-SSL-certificate-in-iOS-application https://github.com/socketio/socket.io-client-swift/issues/326 https://github.com/socketio/socket.io-client-swift/issues/326

但这些似乎早于 swift 3。

我该如何解决这个问题?


经过大量研究,我了解了委托如何在 swift 3 中使用 URLSession 对象。太多内容无法发布链接,但最终,这是最有帮助的:https://gist.github.com/stinger/420107a71a02995c312036eb7919e9f9 https://gist.github.com/stinger/420107a71a02995c312036eb7919e9f9

因此,为了解决这个问题,我从 URLSessionDelegate 继承了我的类,然后添加了以下函数:

func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {

    //accept all certs when testing, perform default handling otherwise
    if webService.isTesting() {
        print("Accepting cert as always")
        completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
    }
    else {
        print("Using default handling")
        completionHandler(.performDefaultHandling, URLCredential(trust: challenge.protectionSpace.serverTrust!))
    }
}

isTesting() 调用确定我是否正在使用测试服务器,然后如果我们处于测试模式,我们将接受所有证书。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

该服务器的证书对于 swift 3 上的自签名证书无效 的相关文章

  • 无法创建带有 nil 模型错误的 NSPersistentStoreCoordinator

    我有一个运行完美的 coreData 数据模型文件 由于一些特殊要求 我deleted旧的数据模型文件并创建另一个数据模型文件完全相同的实体 有实体没有变化来自之前的数据模型 我已将其作为不同的捆绑并从该包中引用它 用于创建 Managed
  • WebView 和 SSL 证书

    我在使用 Android WebView 加载受 SSL 保护的网页时遇到问题 我总是收到如下错误 onReceivedSslError primary error 3 certificate Issued to CN intranet
  • 使用 Avplayer 在后台播放视频

    在我的 iPhone 应用程序中 我想在应用程序进入后台模式时继续播放视频 我正在使用 AVPlayer 但没有找到任何在后台播放视频的方法 如果有人能在这方面帮助我 我将非常感激 谢谢 我可以惊讶地说这是可以实现的 而且我刚刚做到了 此方
  • 使用RestKit执行同步请求

    BOOL do a Restkit request and return a boolean manager postObject nil path mypath parameters password password success R
  • 如何在 XCode 6 iOS 模拟器中运行/录制 iOS 应用程序?

    我可能会犯这个错误 但我正在尝试在 Xcode 6 iOS 模拟器中运行 iOS 应用程序 以便录制该应用程序的视频教程 我已经安装了 xCode 并且可以启动 iOS 模拟器 但似乎无法安装 app 文件 Library Develope
  • 应用内购买在 iOS 5 中不工作

    我已成功将应用程序购买集成到我的应用程序中 我已关注this http www raywenderlich com 21081 introduction to in app purchases in ios 6 tutorial应用程序内购
  • 使用本地时区将 unix 时间戳转换为 NSdate

    我得到一些start times and end times形式为NSDecimalNumber从 API 请求返回 我已经成功地能够转换这些NSDecimalNumbers into NSDates 但代码没有考虑时区 我需要它使用设备上
  • NSNumberFormatter numberFromString 十进制数

    我正在尝试解析NSString with a NSNumberFormatter喜欢跟随 NSNumberFormatter myFormatter NSNumberFormatter alloc init NSNumber myNumbe
  • 如何检测音效何时播放完毕?

    我正在使用 SimpleAudioEngine 并试图在继续之前检测声音效果是否已完成播放 我正在寻找任何方法 但我试图实现的方法不起作用 CDSoundEngine engine CDAudioManager sharedManager
  • 如何使用 PHPicker 从图库中获取 WebP 图像

    我有一个 PHPIckerViewController 自 iOS 14 起可用 我想从画廊获取 WEBP 格式的图像 但是 PHPicker 中的项目提供程序无法加载这种格式的图像 请告诉我如何使用新的选择器在 UIButton 上选择和
  • Xcode 7 UIWebView 不加载 url

    我在我的应用程序中使用 UIWebView 它在 Xcode4 5 6 模拟器中运行良好 但不适用于 Xcode 7 模拟器 我不知道为什么 模拟器中没有警告或错误 屏幕只显示空白页 请帮我 谢谢 import IndexViewContr
  • YouTube IFrame API 使用 HTTPS + HTML5 生成混合内容警告

    当我在 HTML5 模式下使用 iframe api 将 youtube 嵌入 HTTPS 页面时 它仍然使用 HTTP 拉取实际流 这会生成混合内容警告 该用例是否得到适当支持 I found 这次讨论 https groups goog
  • 嵌入了 iOS 项目的 OSX 项目 - 找不到 UIKit.h [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个 OSX 项目和一个 iOS 子项目 子项目使用 UIKit h 但即使子项目已将 UIKit 框架添加到 链接二进制文件与库 部
  • i识别人的扫描图像中的眼睛

    我想开发一个 iPhone 应用程序 它应该识别 QR 阅读器扫描的图像中人的眼睛 脸部和肤色 如何在图像中检测眼睛 虽然这可能是可能的 但我只是警告您 无论编程如何 它都会有一定程度的不准确性 任何面部 视网膜检测软件都可能被欺骗 并且考
  • 在 UIPageViewController 中,当“pageViewController:viewControllerBeforeViewController”被调用时?

    我尝试在中显示照片UIPageViewController 首先 我在集合视图中显示我的照片 然后点击一张照片进入页面视图 然而 当我在页面视图中时 如果我滚动当前照片 向右或向左 我发现两者pageViewController viewC
  • 实例化新视图控制器时从内存中删除视图控制器

    在我的应用程序中 我实例化新的视图控制器而不是使用 Segues 因为它在动画中看起来更好 因此我的视图继续在后台运行 这会导致大量内存泄漏 我返回主屏幕的代码是 let mainStoryboard UIStoryboard name M
  • 如何在 MKMapView iOS 中显示多个注释?

    我是 iOS 开发新手 我想在 iOS 中的 MKMapViewController 中显示多个注释 为此我在 viewDidLoad 方法中编写了代码 void viewDidLoad super viewDidLoad self map
  • 应用程序删除后的iOS应用程序持久设置

    我们正在创建一个应用程序 如下所示 用户从 2 个免费 代币 开始 用户可以通过应用内购买 0 99 美元购买一包 10 个代币 我们已经实现了这个使用NSUserDefaults保存令牌数量 有没有办法让我们的免费 2 令牌设置持久化 即
  • 蓝牙管理器在 iOS 7 上不工作

    我尝试在 iOS 7 上的应用程序中使用蓝牙管理器 但它似乎不起作用 Calling setEnabled and setPowered 蓝牙管理器上没有任何效果 我正在注册通知 BluetoothAvailabilityChangedNo
  • “无法连接到 iTunes Store”

    昨晚 应用内购买没有在 iOS7 模拟器设备上显示 但今天我什至没有更改代码 我也开始在 iOS 8 设备上遇到相同的错误 这是我的课 class InAppC UITableViewController SKProductsRequest

随机推荐