【问题标题】:SSL with Android 2.2 and 2.3SSL 与 Android 2.2 和 2.3
【发布时间】:2012-05-10 19:12:50
【问题描述】:

如果我在 Android 2.3 中点击 https url,它会自动使用 SSL 吗?我在使用 Android 2.2 和 Android 2.3 之间编写的应用程序时遇到问题。当我在 Android 2.2 上点击 https url 时,它会爆炸并给我以下信息,但是当我在 Android 2.3 上使用相同的代码时,我什么也得不到。因此,根据我所做的阅读,我认为此 url 上的证书类型是默认情况下 Android 2.3 接受的类型,但 Android 2.2 不接受,对吗?

05-10 13:04:37.659: WARN/System.err(2177): javax.net.ssl.SSLException: Not trusted server certificate
05-10 13:04:37.659: WARN/System.err(2177): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:371)
05-10 13:04:37.659: WARN/System.err(2177): at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:92)
05-10 13:04:37.659: WARN/System.err(2177): at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381)
05-10 13:04:37.659: WARN/System.err(2177): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:164)
05-10 13:04:37.659: WARN/System.err(2177): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
05-10 13:04:37.659: WARN/System.err(2177): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
05-10 13:04:37.659: WARN/System.err(2177): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)
05-10 13:04:37.659: WARN/System.err(2177): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
05-10 13:04:37.659: WARN/System.err(2177): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
05-10 13:04:37.659: WARN/System.err(2177): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
05-10 13:04:37.667: WARN/System.err(2177): at giat.hermes.network.IntelinkConnector.connect(IntelinkConnector.java:120)
05-10 13:04:37.667: WARN/System.err(2177): at giat.hermes.view.CreateAccount$ThreadLogMeIn.run(CreateAccount.java:77)
05-10 13:04:37.667: WARN/System.err(2177): Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: TrustAnchor for CertPath not found.
05-10 13:04:37.667: WARN/System.err(2177): at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:168)
05-10 13:04:37.674: WARN/System.err(2177): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:366)
05-10 13:04:37.674: WARN/System.err(2177): ... 11 more
05-10 13:04:37.674: WARN/System.err(2177): Caused by: java.security.cert.CertPathValidatorException: TrustAnchor for CertPath not found.
05-10 13:04:37.698: WARN/System.err(2177): at org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi.engineValidate(PKIXCertPathValidatorSpi.java:225)
05-10 13:04:37.698: WARN/System.err(2177): at java.security.cert.CertPathValidator.validate(CertPathValidator.java:202)
05-10 13:04:37.698: WARN/System.err(2177): at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:164)
05-10 13:04:37.698: WARN/System.err(2177): ... 12 more

而且我不想只接受所有服务器证书

另外,如果这是导致问题的原因,是否足以涵盖向后兼容性?我不太可能在未来的 Android 更新中遇到这种情况,对吧?

【问题讨论】:

  • 你所有的假设都是正确的。就像您的 PC 一样,操作系统维护着一系列“受信任的证书颁发机构”。您正在处理的服务器证书是由未在 Android 2.2 中列出的 CA 颁发的。您应该期望,如果 2.3 支持,任何后续版本也将包含相同的 CA 证书。
  • 并且通过在 Android 2.3 上仅使用常规 httpPost 访问 https url,它默认使用 SSL 并处理证书以及所有这些,而无需我做任何事情?

标签: android ssl


【解决方案1】:

如果您希望/需要您的应用使用 2.2 及更低版本,您需要在您的应用中包含 CA 证书并设置 HttpClient 以信任它。您不需要(也不应该)接受所有证书。至于未来的更新,如果证书被泄露,可能会被删除,否则不太可能。

是的,如果您访问的是 HTTPS URL,将使用 SSL(加密)发送和接收数据。您可以捕获数据包进行验证。

【讨论】:

  • 好的。这有帮助。我注意到非常奇怪的行为。我只在运行 2.2.3 的旧摩托罗拉 Droid(如第一个)上看到这个问题。我正在使用运行 2.2.1 的新(er)三星 Infuse 不会遇到该问题。由于还有其他需要 2.3.x 的功能,我想我只是将我的 min SDK 更改为 2.3 并完成它,因为 2.3 似乎没有这个问题。感谢您的帮助
  • 运营商自定义固件,因此Droid和Infuse上的可信证书很可能不同。顺便说一句,我认为摩托罗拉在设置中有一个自定义 UI,允许您添加受信任的证书,但我不确定他们在哪个版本中引入了它。如果可用,您可以尝试使用该证书添加您的证书。此工具将允许您列出受信任的证书(并在有根设备上添加证书)。可能对调试有帮助:github.com/guardianproject/cacert
猜你喜欢
  • 2012-03-07
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多