最近(更多信息)我在最近全新安装的OS X Mavericks 10.9.2的日志中发现了一条奇怪的消息
Apr 27 15:26:47 Ivans-MacBook-Pro.local apsd[194]: Unrecognized leaf certificate
它每 15 分钟左右出现一次。我已经用谷歌搜索了它,还有许多其他用户将他们的日志(很多时候甚至与该问题无关)粘贴到了有该消息的网络上。它似乎至少出现了半年。
apsd是一个持续运行的 Apple Push Notification 服务守护进程
它随机连接到以下服务器之一:
1-courier.push.apple.com
2-courier.push.apple.com
3-courier.push.apple.com
4-courier.push.apple.com
。
.
.
200-courier.push.apple.com
在端口5223上(自定义,但SSL)
每隔一段时间(我猜是为了检查更新)
尝试:https://1-courier.push.apple.com:5223在浏览器中但是显示存在与服务器证书相关的问题。即“此证书无效(主机名不匹配)”。我想这是因为 Apple 没有创建包含通用名称通配符的证书。但是使用Wireshark我看到apsd和 Apple 服务器之间的通信仍在继续。我虽然,那不可能是对的。apsd 是否忽略了有效性检查?!
然后我尝试使用自签名证书执行中间人攻击。这就是我在日志中得到的:
Apr 27 15:42:07 Ivans-MacBook-Pro.local apsd[194]: CFNetwork SSLHandshake failed (-9807)
Apr 27 15:42:07 Ivans-MacBook-Pro.local apsd[194]: Failed to evaluate trust: No error. (0), result=5; retrying with revocation checking optional
Apr 27 15:42:07 Ivans-MacBook-Pro.local apsd[194]: failed to evaluate trust: No error. (0), result=5; retrying with system roots
Apr 27 15:42:07 Ivans-MacBook-Pro.local apsd[194]: Failed to evaluate trust: No error. (0), result=5
Apr 27 15:42:07 Ivans-MacBook-Pro.local apsd[194]: Untrusted peer, closing connection immediately
还值得注意的是,我发现(在使用 Wireshark 观察实际流量时)服务器需要客户端发送他的证书。并且apsd发送:
主题名称
通用名称XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (UUID)
发行人名称
国美
组织苹果公司
组织单位的苹果iPhone
通用名称苹果iPhone设备CA
。
.
.
奇怪的是,Mac OS X 发送的似乎是一个公钥,将它自己呈现为 iPhone?我确实安装了 Xcode,如果它与安装 iPhone 模拟器有关。但是无论 Xcode 是否正在运行,我都会一直收到提到的日志消息。从互联网上的日志来看,显然其他人也是如此。
那么发生了什么?apsd
如何能够找出我的假证书并通过他们的?这里有什么问题吗?注意:我的 MitM 实现非常简单,通过 DNS 欺骗,我给apsd的响应是 X-courier.push.apple.com 是 127.0.0.1。然后,我使用模仿 Apple 服务器证书(国家、组织、通用名称...)的自签名证书进行监听。但我没有实现要求apsd的客户端证书。所以我还不知道这是否与我失败的 MitM 有关。可以吗?
你们在 Mac OS X 上是否在控制台中收到相同的日志消息(它在您启动它时出现在“所有消息”中,但实际上在 system.log 中),在搜索框中键入“叶子”...
更新:
我已经实现了向客户端请求其证书。是一样的(SSLHandshake 失败/无法评估信任)。所以 apsd 正在检查一些东西,我只是不太确定它是否以正确的方式实现。希望有更多经验的人会研究这个......