ios - 使用客户端 SSL 证书并生成 HTTP 403 错误时 iOS 9 中的错误

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

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

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

失败:错误域=NSURLErrorDomain 代码=-1206“服务器“our.server.here”需要客户端证书。”

(注意:这是我的推文的跟进:https://twitter.com/ckmaresca/status/657576686318256128 - 我认为 SO 是大多数人搜索此内容的地方)

最佳答案

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

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

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

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

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

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

关于ios - 使用客户端 SSL 证书并生成 HTTP 403 错误时 iOS 9 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33308194/

相关文章:

c# - 404 拒绝 UrlScan 删除请求

javascript - 403 禁止错误工作灯

ios - 如何在 Swift 中实例化 NSViewController?

ios - String的书写方向

使用 SSL 的 Delphi 和 Indy

flash - 柔性 : How to find out if an object is in a page using SSL/TLS [https protocol]

ios - 如何从第一个 View iOS 初始化第二个 View Controller

IOS无限后台时间

ssl - Mobilefirst 8.0 Java 适配器 SSL

django - 由于 CSRF 失败(Django 1.2.3)导致的间歇性 403s