通过 Alamofire 进行 SSL 固定不起作用

Posted

技术标签:

【中文标题】通过 Alamofire 进行 SSL 固定不起作用【英文标题】:SSL Pinning through Alamofire not working 【发布时间】:2018-10-24 08:29:04 【问题描述】:

我在通过 Alamofire 进行 SSL 固定的项目中遇到了一些问题。 问题是,在另一个临时创建的项目中,一切正常:如果启用 Charles,一切都会被阻止。

现在在这个项目中,它通过了所有调用,即使我的证书不正确。

我认为问题可能是我的 PodFile 导入的库,但我不知道可能是哪个。

我在这里问是因为可能已经遇到了同样的问题。

这是 PodFile:

pod 'SideMenuController'
pod 'ScrollingStackContainer', '~> 0.5'
pod 'SwiftLocation'
pod 'ObjectMapper'
pod 'ActionSheetPicker-3.0'
pod 'Stripe'
pod 'CocoaMQTT'

pod 'SwiftMessages', '5.0.1'
pod 'PusherSwift'
pod 'CryptoSwift', '~> 0.7.2'
pod 'TTSegmentedControl', '~> 0.3.1'
pod 'Fabric'
pod 'Crashlytics'
pod 'KMPlaceholderTextView', '~> 1.3.0'

pod 'FlowTables',       '~> 0.8.2'

pod 'FBSDKLoginKit'

pod 'KeychainAccess',           '~> 3.1.1'
pod 'ios-ntp',                  '~> 1.1.9'
pod 'MMMaterialDesignSpinner',  '~> 0.2.5'

pod 'Alamofire', '4.7.2'
pod 'Kingfisher',  :git => 'https://github.com/onevcat/Kingfisher.git', :tag => '4.9.0'

【问题讨论】:

【参考方案1】:

我发现了问题:

在我的 PodFile 中,还安装了 CocoaDebug,这是一个帮助您调试网络调用的工具。不幸的是,它覆盖了我的自定义 SessionManager,并且还覆盖了有关 SSL 证书固定的方法。

它必须完全卸载,在构建中禁用它是不够的。

【讨论】:

如果你使用 Wormholy,它会在调试中禁用证书固定!【参考方案2】:

当然,在使用 Charles 时一切都会被阻止:这意味着证书固定正在工作,并且应用程序不接受被拦截的响应(在这种情况下是由 Charles 截获的)。你有几个选择:

    为调试版本禁用证书固定,以便您可以使用 Charles。 导出 Charles SSL 证书并将其包含在您的应用程序的调试版本中,使其成为固定证书之一。确保您的发布版本中不包含此证书。

【讨论】:

以上是关于通过 Alamofire 进行 SSL 固定不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 中的证书固定不起作用

针对多个 CA 的 Alamofire 5 自定义 SSL 验证

使用 AFNetworking 进行 SSL 固定不起作用

AlamoFire:公钥固定不起作用

公共固定是 iOS 不与 Alamofire 一起使用

Alamofire,使用未声明的类型