【问题标题】:Bug in iOS 9 when using client SSL certs and generating HTTP 403 errors使用客户端 SSL 证书并生成 HTTP 403 错误时 iOS 9 中的错误
【发布时间】:2016-01-23 08:03:17
【问题描述】:

我认为我们刚刚在 iOS 9(截至 2015 年 10 月 23 日的版本)上发现了一个错误,当时我们使用客户端 SSL 证书与后端 API 对话。与许多 REST 服务一样,我们的 API 会生成 4xx 错误代码来传达状态。其中之一是当客户端尝试访问特定客户端 ID 无权访问的路径时出现 403 Forbidden 错误。请注意,此 HTTP 错误发生在客户端 SSL 证书设置有效连接 & 并且客户端 ID 已通过身份验证之后。

在 iOS 9 中,此序列将生成无效的客户端 SSL 错误:

FAILED: Error Domain=NSURLErrorDomain Code=-1206 "The server “our.server.here” requires a client certificate."

(注意:这是我推文的后续:https://twitter.com/ckmaresca/status/657576686318256128 - 我认为 SO 是大多数人会搜索的地方)

【问题讨论】:

    标签: ios ssl http-status-code-403 client-certificates app-transport-security


    【解决方案1】:

    我们花了几天时间才最终弄清楚,但事实证明这个特定错误是由 Apple 的新应用程序传输层安全性产生的。具体来说,如果您正在使用客户端证书并且您的后端 API 生成 HTTP 403 错误,ATL 会认为证书是错误的并终止整个事务。

    我们知道这一点,因为我们可以在服务器日志中看到请求通过并正确执行。我们还观察到套接字通过请求保持活动状态,并且仅在收到服务器的响应后才会出现此错误。我们还知道我们的客户端证书有效,因为任何不返回 403 的路径都可以零错误工作,并且将 HTTP 错误代码更改为 401 可以解决此问题。

    这有很多问题,但主要是因为 HTTP 错误不是 SSL 错误。两者可以独立操作,并且完全有可能使用有效的客户端 SSL 证书出现 403 错误....

    解决方法是将所有 403 错误更改为其他内容。我会注意到大量的 Oauth1/2 服务器会产生各种 403 错误,所以这可能不是微不足道的。或者,也可以使用反向代理将 HTTP 403 错误重新映射到不同的 HTTP 代码 - 我们尚未对此进行测试。

    我们已经向 Apple 提交了一个错误,但我想提醒人们,这样也许他们可以避免像我们一周那样用头撞墙......

    感谢 Sherbit.io 工程团队(特别是 Varun 和 Matt)对此进行调试。

    【讨论】:

    • 嘿@ckm,我遇到了完全相同的问题并花了几天的时间。你最终使用了什么解决方案?我无法控制服务器不返回 403。:( 你找到任何解决方法了吗?
    • 能否也贴一下 rdar 链接?
    • @ckm,我们仍然遇到同样的问题,雷达上有任何更新吗?
    • 没有更新,抱歉。 iOS10/11 中是否仍然存在该错误?我们通过更改返回时的 HTTP 错误代码解决了这个问题。
    • 很高兴知道这是否在 iOS 10/11 中得到解决
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 2012-03-21
    相关资源
    最近更新 更多