在我的 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
上的属性。
您可以使用 AFSSLPinningModePublicKey
或 AFSSLPinningModeCertificate
固定。 AFSSLPinningModeCertificate
表示服务器的证书必须与 bundle 中的证书完全匹配。
AFSSLPinningModePublicKey
更加自由,这意味着服务器的证书必须匹配 bundle 中的任何公钥,或者附加到 bundle 中的证书的任何公钥。
有一个 example of setting the pinning mode在 AppDotNet 示例中。
关于ios - 如何使用 AFNetworking 比较 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24450914/