使用 AFNetworking 进行 SSL 证书验证

Posted

技术标签:

【中文标题】使用 AFNetworking 进行 SSL 证书验证【英文标题】:SSL Certificate validation with AFNetworking 【发布时间】:2014-05-09 12:57:33 【问题描述】:

我了解 SSL 证书的使用和必要性。我正在寻找http协议和SSL证书之间以及https和SSL证书之间关系的详细解释。

在 AFNetworking 中定义 _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ 允许无效证书。 假设未设置此标志,默认情况下库应拒绝无效证书。但是如果服务器端没有安装证书怎么办?我看到我可以使用 http 协议访问没有证书的服务器。

默认证书验证是否仅适用于 https 协议?

我只想访问那些具有证书且通过 http 和 https 有效的服务器?是否需要此功能?如果需要,是否可能?

【问题讨论】:

如果是这样,我会提交一份关于它的错误报告。你不能和一个连手都没有握手的服务器握手。 是的,你说的最有道理。但我正在经历一些不同的事情。 【参考方案1】:

我想你不明白什么是 HTTP 和 HTTPS:

http 是与服务器通信的会话协议,无需加密。一切都是明文发送的,也无法验证服务器的真实性(即响应的服务器确实具有正确的主机名)。在这种情况下,服务器不需要 SSL 证书。 当您要确保与服务器的通信是加密的时使用https。为此,服务器需要 SSL 证书,并且在通过 HTTP 会话发送任何内容之前,将发生握手,允许客户端获取服务器的 SSL 证书以加密发送的数据。因此 SSL 证书仅用于 HTTPS 连接。

也可以根据使用的 SSL 证书来验证服务器的真实性。所有浏览器(默认情况下在 ios 上,除非您在应用程序中明确更改此设置)将仅接受由已知证书颁发机构颁发的 SSL 证书。这样,您可以确定服务器确实位于您请求的主机名处。根据 SSL 证书,还可以验证服务器的所有者(即服务器确实属于它声称属于的公司)。

【讨论】:

以上是关于使用 AFNetworking 进行 SSL 证书验证的主要内容,如果未能解决你的问题,请参考以下文章

iOS SSL Pinning 没有使用 AFNetworking 的证书?

使用 AFNetworking 进行 SSL 固定 - validatesCertificateChain = true

使用 AFNetworking 2.3.1 的自签名 SSL 证书

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

如何允许用户在 iOS 中使用 AFNetworking 信任和固定自签名 SSL 证书

SSL pinning - 在 AFSecurityPolicy 中设置固定公钥而不是固定证书