iOS 应用 SSL 握手失败

Posted

技术标签:

【中文标题】iOS 应用 SSL 握手失败【英文标题】:iOS app SSL handshake failed 【发布时间】:2013-03-23 23:38:57 【问题描述】:

我正在制作一个应用程序,通过在 post 方法中传递登录凭据来通过 HTTPS 登录到 aspx 网站。使用 Charles Proxy 检查响应时,我可以看到来自 seal.verisign.com 的 SSL Handshake failed 错误,然后我被带回登录页面。我不确定我需要做什么来解决这个问题。

我正在 iPhone 模拟器中对此进行测试。

我无权访问服务器实现。

有什么想法吗?

谢谢!

【问题讨论】:

【参考方案1】:

如果在模拟器上运行,只需重启 Charles Proxy 和模拟器,确保 Charles Proxy 先启动

【讨论】:

【参考方案2】:

ios >= 10.3 上,安装 Charles Proxy 证书后(根据 @ashish-verma 的出色回答),您还需要通过 Settings -> General启用它> -> 关于 -> 证书信任设置

在这里完成设置:http://www.devsbedevin.net/debugging-ios-ssl-traffic/

【讨论】:

【参考方案3】:

删除所有旧用户凭据,然后重新安装新的 ssl 证书。

【讨论】:

【参考方案4】:

如果安装证书仍然没有帮助,那么可能是由于 SSL Pinning。

来自 charlesproxy.com:

SSL 固定 请注意,某些应用程序实施 SSL 证书固定,这意味着它们专门验证根证书。因为应用程序本身正在验证根证书,所以它不会接受 Charles 的证书并且连接会失败。如果您已成功安装 Charles 根 SSL 证书并且可以在 Safari 中使用 SSL 代理浏览 SSL 网站,但应用程序失败,可能是 SSL Pinning 问题

【讨论】:

有什么办法可以解决 Charles Proxy 的 SSL pinning 问题? @tingason 使用 android,并修补应用程序以禁用 SSL Pinning,或修补 iOS 应用程序并重新签名。 @tingason for ios:iphone越狱,然后使用iOS SSL Kill Switch,或者root android,使用(基于Xposed)JustTrustMe或者Android-SSL-TrustKiller,详细解释请查看my post用中文写的【参考方案5】:

您需要安装 SSL 证书才能解决此问题。

按照以下步骤操作

    iOS 模拟器

    上打开 Safari 浏览器

    在地址栏中输入“www.charlesproxy.com/getssl”

    安装 SSL 证书 重启Charles 代理

【讨论】:

【参考方案6】:

您必须在移动设备上安装 SSL 证书。

在线搜索如何为 Charles Proxy 安装 SSL 证书。

【讨论】:

请注意overt self-promotion is not allowed here。我建议您从您的答案中编辑指向您博客的链接。它们只允许在您的个人资料页面中使用。【参考方案7】:

也许在实际设备上进行测试会提供更多信息?

在查尔斯做到这一点:

    转到代理:代理设置... 代理选项卡:在 HTTP 代理端口:字段中输入“8888” SSL 选项卡:确保“启用 SSL 代理”已打开

在您的开发机器上:

    转到系统偏好设置:网络:Wifi:高级:TCP/IP 选项卡:记下 IPV4 地址:(即 10.0.1.101)

在您的 iDevice 上:

    从您的设备转到 http://charlesproxy.com/charles.crt 并下载 Charles SSL 证书 好的证书是受信任的(完成后请务必禁用或删除它) 转到设置应用程序:Wifi:为您的网络选择详细的披露按钮(带有白色箭头的蓝色圆形按钮) 在 HTTP 代理下,选择“手动” 在“服务器”字段中输入步骤(开发机器 1.)中的地址,以及步骤(查尔斯 2.)中的端口号

最后:

    重启查尔斯 在您的 iDevice 上运行 Safari 进行测试。这应该会提示 Charles 显示一个对话框以允许或拒绝 SSL 代理。显然允许,你应该很高兴。

Charles 网站上的更多信息:http://www.charlesproxy.com/documentation/proxying/ssl-proxying/

另外,你是否收到了对连接的响应:(NSURLConnection*)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge*)challenge 方法?

【讨论】:

“在您的 iDevice 上”的第 1 步是我不知道的,肯定为我节省了几个小时。谢谢。【参考方案8】:

服务器可能没有您正在使用的 url 的有效证书。 你检查了吗?

如果您使用浏览器尝试该 url,它会给您一个警告吗?

【讨论】:

以上是关于iOS 应用 SSL 握手失败的主要内容,如果未能解决你的问题,请参考以下文章

Qt & SSL,握手失败

Tomcat 7 Web 应用程序获得 SSL 握手失败,桌面应用程序没有

与 node.js 服务器的 SSL 握手失败

如何修复“SSL 握手失败”

客户端 Hello 后 SSL 握手失败服务器 [FIN, ACK]

Qt SSL:从 QML 发出的请求握手失败