请求request_token出现如下异常,求解11-08 15:08:43.516: W/System.err(2770): oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: Not trusted server certificate
11-08 15:08:43.525: W/System.err(2770): at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:215)
11-08 15:08:43.525: W/System.err(2770): at oauth.signpost.AbstractOAuthProvider.retrieveRequestToken(AbstractOAuthProvider.java:69)
11-08 15:08:43.525: W/System.err(2770): at com.mypack.oauth.OAuthAsyncTask.doInBackground(OAuthAsyncTask.java:27)
11-08 15:08:43.525: W/System.err(2770): at com.mypack.oauth.OAuthAsyncTask.doInBackground(OAuthAsyncTask.java:1)
11-08 15:08:43.536: W/System.err(2770): at android.os.AsyncTask$2.call(AsyncTask.java:185)
11-08 15:08:43.546: W/System.err(2770): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-08 15:08:43.546: W/System.err(2770): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-08 15:08:43.556: W/System.err(2770): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
11-08 15:08:43.556: W/System.err(2770): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
11-08 15:08:43.566: W/System.err(2770): at java.lang.Thread.run(Thread.java:1096)
11-08 15:08:43.566: W/System.err(2770): Caused by: javax.net.ssl.SSLException: Not trusted server certificate
11-08 15:08:43.566: W/System.err(2770): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:371)
11-08 15:08:43.566: W/System.err(2770): at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:92)
11-08 15:08:43.576: W/System.err(2770): at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381)
11-08 15:08:43.586: W/System.err(2770): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:164)
11-08 15:08:43.595: W/System.err(2770): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
11-08 15:08:43.606: W/System.err(2770): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
11-08 15:08:43.616: W/System.err(2770): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)
11-08 15:08:43.616: W/System.err(2770): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
11-08 15:08:43.616: W/System.err(2770): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
11-08 15:08:43.637: W/System.err(2770): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
11-08 15:08:43.637: W/System.err(2770): at oauth.signpost.commonshttp.CommonsHttpOAuthProvider.sendRequest(CommonsHttpOAuthProvider.java:92)
11-08 15:08:43.686: W/System.err(2770): at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:178)
11-08 15:08:43.686: W/System.err(2770): ... 9 more
11-08 15:08:43.686: W/System.err(2770): Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Could not validate certificate signature.
11-08 15:08:43.696: W/System.err(2770): at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:168)
11-08 15:08:43.706: W/System.err(2770): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:366)
11-08 15:08:43.706: W/System.err(2770): ... 20 more
11-08 15:08:43.706: W/System.err(2770): Caused by: java.security.cert.CertPathValidatorException: Could not validate certificate signature.
11-08 15:08:43.726: W/System.err(2770): at org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi.engineValidate(PKIXCertPathValidatorSpi.java:342)
11-08 15:08:43.726: W/System.err(2770): at java.security.cert.CertPathValidator.validate(CertPathValidator.java:202)
11-08 15:08:43.726: W/System.err(2770): at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:164)
11-08 15:08:43.726: W/System.err(2770): ... 21 more
11-08 15:08:43.737: W/System.err(2770): Caused by: java.security.SignatureException: Signature was not verified.
11-08 15:08:43.756: W/System.err(2770): at org.apache.harmony.security.provider.cert.X509CertImpl.fastVerify(X509CertImpl.java:601)
11-08 15:08:43.756: W/System.err(2770): at org.apache.harmony.security.provider.cert.X509CertImpl.verify(X509CertImpl.java:544)
11-08 15:08:43.766: W/System.err(2770): at org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi.engineValidate(PKIXCertPathValidatorSpi.java:337)
11-08 15:08:43.766: W/System.err(2770): ... 23 more
11-08 15:08:43.525: W/System.err(2770): at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:215)
11-08 15:08:43.525: W/System.err(2770): at oauth.signpost.AbstractOAuthProvider.retrieveRequestToken(AbstractOAuthProvider.java:69)
11-08 15:08:43.525: W/System.err(2770): at com.mypack.oauth.OAuthAsyncTask.doInBackground(OAuthAsyncTask.java:27)
11-08 15:08:43.525: W/System.err(2770): at com.mypack.oauth.OAuthAsyncTask.doInBackground(OAuthAsyncTask.java:1)
11-08 15:08:43.536: W/System.err(2770): at android.os.AsyncTask$2.call(AsyncTask.java:185)
11-08 15:08:43.546: W/System.err(2770): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-08 15:08:43.546: W/System.err(2770): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-08 15:08:43.556: W/System.err(2770): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
11-08 15:08:43.556: W/System.err(2770): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
11-08 15:08:43.566: W/System.err(2770): at java.lang.Thread.run(Thread.java:1096)
11-08 15:08:43.566: W/System.err(2770): Caused by: javax.net.ssl.SSLException: Not trusted server certificate
11-08 15:08:43.566: W/System.err(2770): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:371)
11-08 15:08:43.566: W/System.err(2770): at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:92)
11-08 15:08:43.576: W/System.err(2770): at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381)
11-08 15:08:43.586: W/System.err(2770): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:164)
11-08 15:08:43.595: W/System.err(2770): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
11-08 15:08:43.606: W/System.err(2770): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
11-08 15:08:43.616: W/System.err(2770): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)
11-08 15:08:43.616: W/System.err(2770): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
11-08 15:08:43.616: W/System.err(2770): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
11-08 15:08:43.637: W/System.err(2770): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
11-08 15:08:43.637: W/System.err(2770): at oauth.signpost.commonshttp.CommonsHttpOAuthProvider.sendRequest(CommonsHttpOAuthProvider.java:92)
11-08 15:08:43.686: W/System.err(2770): at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:178)
11-08 15:08:43.686: W/System.err(2770): ... 9 more
11-08 15:08:43.686: W/System.err(2770): Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Could not validate certificate signature.
11-08 15:08:43.696: W/System.err(2770): at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:168)
11-08 15:08:43.706: W/System.err(2770): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:366)
11-08 15:08:43.706: W/System.err(2770): ... 20 more
11-08 15:08:43.706: W/System.err(2770): Caused by: java.security.cert.CertPathValidatorException: Could not validate certificate signature.
11-08 15:08:43.726: W/System.err(2770): at org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi.engineValidate(PKIXCertPathValidatorSpi.java:342)
11-08 15:08:43.726: W/System.err(2770): at java.security.cert.CertPathValidator.validate(CertPathValidator.java:202)
11-08 15:08:43.726: W/System.err(2770): at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:164)
11-08 15:08:43.726: W/System.err(2770): ... 21 more
11-08 15:08:43.737: W/System.err(2770): Caused by: java.security.SignatureException: Signature was not verified.
11-08 15:08:43.756: W/System.err(2770): at org.apache.harmony.security.provider.cert.X509CertImpl.fastVerify(X509CertImpl.java:601)
11-08 15:08:43.756: W/System.err(2770): at org.apache.harmony.security.provider.cert.X509CertImpl.verify(X509CertImpl.java:544)
11-08 15:08:43.766: W/System.err(2770): at org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi.engineValidate(PKIXCertPathValidatorSpi.java:337)
11-08 15:08:43.766: W/System.err(2770): ... 23 more
public class _FakeX509TrustManager implements X509TrustManager { private static TrustManager[] trustManagers;
private static final X509Certificate[] _AcceptedIssuers = new
X509Certificate[] {}; @Override
public void checkClientTrusted(X509Certificate[] chain, String
authType) throws CertificateException {
} @Override
public void checkServerTrusted(X509Certificate[] chain, String
authType) throws CertificateException {
} public boolean isClientTrusted(X509Certificate[] chain) {
return true;
} public boolean isServerTrusted(X509Certificate[] chain) {
return true;
} @Override
public X509Certificate[] getAcceptedIssuers() {
return _AcceptedIssuers;
} public static void allowAllSSL() {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier(){ @Override
public boolean verify(String arg0, SSLSession arg1) {
// TODO Auto-generated method stub
return true;
} }); SSLContext context = null;
if (trustManagers == null) {
trustManagers = new TrustManager[] { new _FakeX509TrustManager() };
} try {
context = SSLContext.getInstance("TLS");
context.init(null, trustManagers, new SecureRandom());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
}}
(2)在你要联网的地方调用,示例如下_FakeX509TrustManager.allowAllSSL();
HttpURLConnection con =null;
URL postUrl = new URL("https://open.t.qq.com/cgi-bin/request_token?"+params);
con = (HttpURLConnection) postUrl.openConnection();
con.setRequestMethod("GET");
本人授权使用HttpURLConnetion方法,如上面代码所述,在联网前调用_FakeX509TrustManager.allowAllSSL()函数,便可正常联网了,直接无视 SSL证书 是否有效。
我用了上面的那个类没有用哦,我用的httpclient发送的请求,有用吗?
问题已经解决
这个网站的HttpClient 跟 腾讯API 的 HttpClient 不是一个包 ? 怎么弄呢
地址写错了,应该是http://06peng.com/read.php?60
1.这是因为Https认证被截获导致,Client认为安全失效,很久之前就出现了这个问题了,那时候在WebView上加上
下面的代码就可以解决了 WebView在哪,在哪加代码?
2.调用方法,只要用认证返回的HttpCilent即可。代码:
public HttpClient getNewHttpClient() { 这个方法又加在谁里面呀!