ios - 如何使用 AFNetworking 比较 SSL 证书

标签 ios security ssl https afnetworking

在我的 iPhone 应用程序中,我使用带有自签名 SSL 证书的 https 连接从服务器下载敏感数据(用户名和密码)。

此应用仅供私有(private)使用,不适用于生产。

我正在使用 AFNetworking 来管理 https 连接,但是,由于我的证书不是从 CA 签署的,为了让它工作,我必须添加AFURLConnectionOperation 类 header 的以下内容:

#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ 1

但是有了这个我的应用程序将允许任何证书。

有没有办法只允许来 self 的服务器的证书可能将其捆绑在应用程序中并将其与服务器在 https 连接中提供的证书进行比较? 如果可能的话,在安全方面会有什么显着优势吗?

我对安全性很陌生,我有点困惑。

最佳答案

您要查找的术语是 SSL Pinning,其中应用会验证已知证书或公钥是否与远程服务器提供的相匹配。

AFNetworking 支持使用证书或公钥固定。您需要将证书或公钥添加到应用程序的 Bundle 中,并通过设置 defaultSSLPinningMode 来启用该功能。 AFHttpClient 或 SSLPinningMode 上的属性AFURLConnectionOperation 上的属性。

您可以使用 AFSSLPinningModePublicKeyAFSSLPinningModeCertificate 固定。 AFSSLPinningModeCertificate 表示服务器的证书必须与 bundle 中的证书完全匹配。

AFSSLPinningModePublicKey 更加自由,这意味着服务器的证书必须匹配 bundle 中的任何公钥,或者附加到 bundle 中的证书的任何公钥。

有一个 example of setting the pinning mode在 AppDotNet 示例中。

关于ios - 如何使用 AFNetworking 比较 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24450914/

相关文章:

ios - 快速从文本文件加载单独的组件

javascript - 我可以保护原生 JavaScript 函数吗

ios - 验证来自客户的应用内购买收据

java - 配置 tomcat/hibernate 以拥有支持 1.2.840.113549.1.5.13 的加密提供程序

ios - UIViewControllerRepresentable 在 Xcode 14 iOS 16 上崩溃

ios - 核心数据谓词的托管对象中的自定义方法

ios - swift 3 : popToViewController not working

java - 如何修复请求属性的跨站点脚本?

apache-flex - 通过 ssl 灵活的 XMLSocket

java - Hibernate 中的 SSL 代码