请求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

解决方案 »

  1.   

    Communication with the service provider failed: Not trusted server certificatecertificate 有问题吧?
      

  2.   

    (1)添加类
    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证书 是否有效。
      

  3.   


    我用了上面的那个类没有用哦,我用的httpclient发送的请求,有用吗?
      

  4.   

    http://06peng.com/blog/read.php?60
    问题已经解决
      

  5.   


    这个网站的HttpClient 跟 腾讯API 的 HttpClient  不是一个包 ? 怎么弄呢
      

  6.   

    直接代替腾讯的httpclient就可以用了。或者你改成腾讯的。
      

  7.   


    地址写错了,应该是http://06peng.com/read.php?60
      

  8.   

    四大微博那个里面说的模糊的呀!http://06peng.com/read.php?60
    1.这是因为Https认证被截获导致,Client认为安全失效,很久之前就出现了这个问题了,那时候在WebView上加上 
      下面的代码就可以解决了 WebView在哪,在哪加代码?
    2.调用方法,只要用认证返回的HttpCilent即可。代码:
    public HttpClient getNewHttpClient() {  这个方法又加在谁里面呀!