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/16605898/

相关文章:

java - 如何在 Java 中隐藏我的数据库信息?

php - 尝试安装 SSL 后 Opencart 网站出现奇怪的错误

ios - XCode 4.5 分析工具

ios - 不使用 SearchBar 过滤 UITableView

javascript - 使用 Javascript 获取内容的高度,移动 Web View

c - 这部分代码在做什么?

java - 使用客户端证书和 Android 的 HttpsURLConnection 通过 SSL 上传文件

ios - View Controller only 协议(protocol)无权访问 View Controller 属性

javascript - 将 token 存储到 JS 本地存储安全吗?

security - Sitecore 6 是否可以在已经登录后更改虚拟用户的角色?