【问题标题】:"Server certificate untrusted" error in iPhone applicationiPhone 应用程序中的“服务器证书不受信任”错误
【发布时间】:2009-08-22 11:06:25
【问题描述】:

我在我的 iPhone 3G OS 3.0.1 上使用my iPhone application 没有任何问题。应用程序连接到https://api.serverdensity.com/1.0/ 的 API URL,所有请求都通过它。

该应用的用户报告说他们现在突然收到“不受信任的服务器证书”错误。没有其他用户遇到此问题(据我所知),我无法重现它。

SSL 证书是 *.serverdensity.com 上的通配符证书。它是从 GoDaddy 购买的,有效期至 2010 年 5 月。

此外,用户正在运行 OS 3.0.1,设备上的时间/日期设置正确,如果他在 Safari 中访问 API URL,它会正确加载。

对此有什么建议吗?

【问题讨论】:

    标签: iphone ssl ssl-certificate


    【解决方案1】:

    我遇到了同样的问题!

    您是否在那里安装了“中间证书包”?如果您不这样做,那么您将在所有移动平台(以及一些 PC 平台)上获得不受信任的服务器证书。

    网站引用:

    在安装您颁发的 SSL 证书之前,您必须在您的 Web 服务器上下载并安装我们的中间证书包。您也可以从存储库下载捆绑包。

    查看GoDaddy SSL install instructions 了解您的网络服务器设置。

    可以在here找到中间证书包。

    【讨论】:

    • 对,但如果这是问题,它应该总是发生。听起来这是断断续续的。
    • 当它发生在我身上时,很奇怪。它正在工作,然后在某个日期后停止工作。所以这对我来说不是间歇性的,但它确实从工作到不工作而没有任何明显的原因。
    • 是的,我确实安装了这个包并且实际上也写了关于它的博客 - blog.boxedice.com/2009/05/11/…。但是,如果这是问题所在,那么我也希望在浏览器中看到错误。
    • @shanepowell 可能是您的证书或链中的某些证书​​刚刚过期?
    • 证书未过期。我安装了中间包,我的问题就消失了。听起来大卫的问题与我的不同。
    【解决方案2】:

    看起来一切都通过证书的安装进行了检查。服务器正在发送所有中间证书:http://www.sslshopper.com/ssl-checker.html?hostname=api.serverdensity.com

    【讨论】:

      【解决方案3】:

      如果您遇到“服务器证书不受信任”的错误,请验证您的 iPhone 或 iPod 的日期和时间设置。

      从 iPhone/iPod“设置”中更正日期和时间后。它会自动处理所有应用程序(即 Yahoo messenger、Citrix、Push mail ....etc)遇到“不受信任的服务器证书”问题。试一试吧。希望对你有一点帮助。谢谢。

      【讨论】:

      • 工作就像一个魅力。谢谢!
      【解决方案4】:

      早期的 iO​​S 和 android 设备带有一个小于桌面浏览器的根证书数据库。您需要将中间 CA 证书与服务器证书连接起来,并让 Web 服务器将它们全部发送到手机。后来的 iOS 和 android 版本通过在设备上包含更多 ca 证书来解决此问题。

      【讨论】:

        【解决方案5】:

        我实际上已经在我自己的应用程序中看到了这一点,该应用程序也使用了 Godaddy 证书 - 是的,我已经在我的服务器上安装了中间证书。

        这种情况很少见,但如果用户进入 wifi 热点,该热点会将其登录页面插入连接尝试,则可能会发生这种情况。这实际上是 SSL 的正确行为,它是由热点有效地为您的 URL 执行中间人重定向引起的。

        他们可以通过首先进入 Safari 并让连接正常工作来修复它。

        OS3.0 应该对这种热点进行一些自动登录,但根据我的经验,它并不总是有效。

        编辑:补充一点,在我使用 SSL 之前,我曾经为纯 http 检测到这一点,并提供了适当的错误消息。可能建议在您的应用程序中捕获此错误并发出类似的消息“您可能已连接到需要您登录的热点”等。现在您已经提醒我,我需要自己做应用程序。

        【讨论】:

        • 用户说他在 wifi 和蜂窝数据网络上都试过了,但同样的错误。他还重新安装了该应用程序。
        • 很奇怪,它在 Safari 中可以工作,但不能在您的客户端上工作。您是否使用标准 URL 加载内容以及使用什么缓存策略?用户是否尝试过清除 Safari 缓存?
        • 这是一个非常有用的建议,因为大多数通过 HTTPS 连接到 API 的应用都会遇到这个问题。
        【解决方案6】:

        我们之前在连接到我们的 API 时使用基本 HTTP AUTH 的“硬编码”身份验证方法:

        NSString *requestURL = [NSString stringWithFormat:@"https://%@:%@@api.serverdensity.com/1.0/?account=%@.serverdensity.com&c=%@", username, password, account, command];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:requestURL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
        

        但在我们最新的更新中改用“正确”的方法:

        NSString *requestURL = [NSString stringWithFormat:@"https://api.serverdensity.com/1.0/?account=%@.serverdensity.com&c=%@", account, command];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:requestURL] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];
        

        使用NSURLCredential 正确处理HTTP 身份验证。此次更新后,相关用户的证书错误消失了。

        【讨论】:

          【解决方案7】:

          我在越狱的测试手机上看到了相同的错误消息,但在我的其他测试手机上没有。我从来没有进一步调查它,但我想我会提到以防万一......

          【讨论】:

            【解决方案8】:

            我会确认您的手机可以在没有警告的情况下加载任何 https:// 网址。我有一部旧的 3.1.3 iPhone,出于某种原因,它会警告它遇到的每个证书。不知道是什么原因,但它几乎无法用于测试我的网络服务。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-02-26
              • 2020-11-14
              • 2011-08-01
              • 1970-01-01
              • 2014-11-29
              • 1970-01-01
              • 2015-02-14
              • 2015-01-24
              相关资源
              最近更新 更多