Android 使用安卓2.2和2.3的SSL

Android 使用安卓2.2和2.3的SSL,android,ssl,Android,Ssl,如果我在Android 2.3中点击https url,它会自动使用SSL吗?我在安卓2.2和安卓2.3之间编写的应用程序中遇到了问题。当我在安卓2.2上点击https url时,它爆炸了,并给出了以下信息,但当我在安卓2.3上使用相同的代码时,我什么也得不到。因此,从我所做的阅读来看,我认为这个url上的证书类型是安卓2.3默认接受的类型,但不是安卓2.2接受的类型,对吗 05-10 13:04:37.659: WARN/System.err(2177): javax.net.ssl.SSLE

如果我在Android 2.3中点击https url,它会自动使用SSL吗?我在安卓2.2和安卓2.3之间编写的应用程序中遇到了问题。当我在安卓2.2上点击https url时,它爆炸了,并给出了以下信息,但当我在安卓2.3上使用相同的代码时,我什么也得不到。因此,从我所做的阅读来看,我认为这个url上的证书类型是安卓2.3默认接受的类型,但不是安卓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的未来更新中遇到这种情况,对吗?

如果你想/需要你的应用程序使用2.2及更低版本,你需要在你的应用程序中包含CA证书,并设置HttpClient以信任它。您不需要(也不应该)接受所有证书。至于将来的更新,如果证书被破坏,它可能会被删除,但否则就不太可能了


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

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


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

你所有的假设都是正确的。就像你的电脑一样,操作系统维护着一系列“可信证书颁发机构”。您正在处理的服务器证书是由Android 2.2中未列出的CA颁发的。如果2.3支持,任何后续版本都将包含相同的CA证书。通过在Android 2.3上使用常规httpPost点击https url,默认情况下它使用SSL并处理证书以及所有这些,而无需我做任何事情?您所有的假设都是正确的。就像你的电脑一样,操作系统维护着一系列“可信证书颁发机构”。您正在处理的服务器证书是由Android 2.2中未列出的CA颁发的。如果2.3支持,那么任何后续版本都会包含相同的CA证书。通过在Android 2.3上使用常规httpPost点击https url,它默认使用SSL并处理证书以及所有这些,而无需我做任何事情?好的。这很有帮助。我注意到了非常奇怪的行为。我只在运行2.2.3的旧摩托罗拉Droid(像第一个一样)上看到这个问题。我使用的一款新的(呃)三星Infuse 2.2.1没有遇到这个问题。由于还有其他需要2.3.x的功能,我想我只需要将我的min SDK更改为2.3并完成它,因为2.3似乎没有这个问题。感谢您的帮助运营商定制固件,因此Droid和Infuse上的受信任证书很可能不同。顺便说一句,我认为摩托罗拉在设置中有一个自定义用户界面,允许您添加可信证书,但我不确定他们采用的是哪个版本。如果可用,您可以尝试使用该证书添加您的证书。此工具将允许您列出受信任的证书(并在根设备上添加证书)。可能有助于调试:ok。这很有帮助。我注意到了非常奇怪的行为。我只在运行2.2.3的旧摩托罗拉Droid(像第一个一样)上看到这个问题。我使用的一款新的(呃)三星Infuse 2.2.1没有遇到这个问题。由于还有其他需要2.3.x的功能,我想我只需要将我的min SDK更改为2.3并完成它,因为2.3似乎没有这个问题。感谢您的帮助运营商定制固件,因此Droid和Infuse上的受信任证书很可能不同。顺便说一句,我认为摩托罗拉在设置中有一个自定义用户界面,允许您添加可信证书,但我不确定他们采用的是哪个版本。如果可用,您可以尝试使用该证书添加您的证书。此工具将允许您列出受信任的证书(并在根设备上添加证书)。可能有助于调试: