【问题标题】:SSL problem on iPhoneiPhone 上的 SSL 问题
【发布时间】:2010-12-31 03:29:11
【问题描述】:

我已将 SSL 证书(来自 godaddy,但也尝试过 rapidssl)添加到网站。

Safari 和 IE 都可以浏览到 https:// 并报告证书有效,没有任何警告。但是,如果我尝试从 iPhone 浏览到相同的地址,则会收到无效证书错误。我正在使用 heroku 作为相关网站的主机。

有人看过吗?我很困惑为什么 2 款不同的 iphone 无法做到这一点,但桌面浏览器就很好......

【问题讨论】:

  • 我认为 serverfault 可能是一个更好的地方。

标签: iphone ssl https


【解决方案1】:

这里的问题原来是 iPhone 不支持服务器名称指示 (SNI),这是使 Heroku 的 SNI SSL 工作所必需的。 (编辑)现在 iOS 3.2 及更高版本支持它。

您可以通过手机上的 Safari 访问以下 URL 来确认 SNI:

https://sni.velox.ch

我发现我可以在 iphone 客户端中设置以下 SSL 设置:

kCFStreamSSLPeerName = 空

... 这解决了问题。但我还没有弄清楚这会如何影响安全性——文档不是很清楚。

据我了解,当您在 heroku 等云主机上设置自定义域时,它指向代理,并且该名称与您的证书主机名不匹配。 Safari 和 IE 等浏览器支持 SNI,并且知道如何解决这个问题 - 但手机不支持。

正如我上面所说,这已经不是问题了,除非您支持 iOS 3.1.3 或更低版本...

【讨论】:

  • 感谢您提供方便的链接。仅供参考,刚刚在基于 iOS4 的 iphone 上尝试过,它在 iOS4 中受支持。我没有尝试以前的版本。
  • 我认为 iPad 上没有 SNI 支持 - 3.2.2 刚刚尝试过。它确实适用于 iPhone 4.1,因此它似乎也适用于 iPad 4.2。这是在一个 Heroku SNI 网站上,除了 XP(XP 不支持 sni)之外,它在其他任何地方都可以使用
【解决方案2】:

您还需要引用中间证书,以便将整个证书链返回到根证书。

请参阅 this blog post 以了解对同一问题的描述以及他如何为 Apache 解决该问题。

【讨论】:

  • 我是为 Godaddy 证书做的——你只需将捆绑包和你的证书放在一起。请注意,我说它在我尝试过的所有浏览器上都可以正常工作,只是在 iphone 上不行,所以很确定证书安装正确。
  • 我遇到了同样的问题(黑莓和 iPhone)。正是这样。服务器只是发送证书并期望客户端拥有中间证书和根证书。移动设备很多时候都没有安装这些中间证书,所以信任链被破坏了。
  • 例如,我的 firefox 3.5.6 有 Go Daddy 中级证书,但没有 rapidssl 中级证书。
【解决方案3】:

只是因为这两个证书颁发机构不在 iPhone 的受信任证书存储中,而是用于 Windows、firefox 等。

编辑:

我猜前面的海报是正确的,你没有捆绑中间证书。您的证书可能是由 rapidssl.com 签署的,但 rapidssl.com 的证书是由 Equifax 签署的。每个证书都有一个颁发者名称字段和一个主题名称字段;将它们视为一对名称(X,Y)。您的证书主题名称反映了您的网站名称,并且由 rapidssl 签名,因此该对类似于 (rapidssl, www.whatever.com)。 rapidssl 证书是由 equifax 签署的,这样就可以成对(equifax,rapidssl)。并且 equifax 证书可能有(equifax,equifax)。根证书应具有相同的颁发者和主题名称。如您所见,这形成了一个形式为 (A,A) (A,B) (B,C) (C,D) .... 的链。它很少超过 3。SSL 的规则是您应该发送链中的每个证书除了根证书。一些客户可能已经拥有中间证书,但您永远不要指望它。

【讨论】:

  • 两个提供商都在证书存储区,据苹果称:support.apple.com/kb/HT3580
  • 证书链对您的证书来说是什么样的?我对颁发者和主题 DN 感兴趣,不包括您证书的主题 DN。
  • 该链基本上是“Equifax 安全证书颁发机构”,我在其下拥有自己的域证书。我不确定您所说的“主题 DN”是什么意思?
  • 抱歉使用了行话。 DN 是“专有名称”的缩写。基本上,每个证书都有一个颁发者名称字段和一个主题名称字段。
  • 嗯,我在 apple.com 链接上没有看到 rapidssl ca
【解决方案4】:

我知道这已经得到解答,但以防万一有人再次遇到这个问题,我想我会分享我错过的东西,因为我最近遇到了同样的问题,但架构略有不同。

我们的服务器设置有点不同,因为我们有 stunnel 解密 ssl 流量,然后将其传递给 haproxy,后者会将其路由到 apache,后者会将其代理到我们的应用程序服务器。在与 apache 混了一段时间后,我意识到 stunnel 配置不包含中间证书,所以我连接了域证书(第一个),然后连接了中间证书(形成一个长长的证书链)。

这解决了我的问题。

【讨论】:

    猜你喜欢
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多