新浪微博 auth2 https ssl 报错

来源:互联网 发布:c 连接没有密码mysql 编辑:程序博客网 时间:2024/05/21 06:32

新浪微博 在认证时发布https请求时 报错

auth2.0

javax.net.ssl.SSLPeerUnverifiedException: No peer certificate的错误,

由于android的运行版本太低导致的 没有集成ssl安全协议

从写 httpclient即可

[java] view plaincopy
  1. import java.io.IOException;  
  2. import java.net.Socket;  
  3. import java.net.UnknownHostException;  
  4. import java.security.KeyManagementException;  
  5. import java.security.KeyStore;  
  6. import java.security.KeyStoreException;  
  7. import java.security.NoSuchAlgorithmException;  
  8. import java.security.UnrecoverableKeyException;  
  9.   
  10. import javax.net.ssl.SSLContext;  
  11. import javax.net.ssl.TrustManager;  
  12. import javax.net.ssl.X509TrustManager;  
  13.   
  14. import org.apache.http.conn.ssl.SSLSocketFactory;  
  15.   
  16. public class SSLSocketFactoryEx extends SSLSocketFactory {  
  17.   
  18.     SSLContext sslContext = SSLContext.getInstance("TLS");  
  19.   
  20.     public SSLSocketFactoryEx(KeyStore truststore)  
  21.             throws NoSuchAlgorithmException, KeyManagementException,  
  22.             KeyStoreException, UnrecoverableKeyException {  
  23.         super(truststore);  
  24.   
  25.         TrustManager tm = new X509TrustManager() {  
  26.   
  27.             public java.security.cert.X509Certificate[] getAcceptedIssuers() {  
  28.                 return null;  
  29.             }  
  30.   
  31.             @Override  
  32.             public void checkClientTrusted(  
  33.                     java.security.cert.X509Certificate[] chain, String authType)  
  34.                     throws java.security.cert.CertificateException {  
  35.   
  36.             }  
  37.   
  38.             @Override  
  39.             public void checkServerTrusted(  
  40.                     java.security.cert.X509Certificate[] chain, String authType)  
  41.                     throws java.security.cert.CertificateException {  
  42.   
  43.             }  
  44.         };  
  45.         sslContext.init(nullnew TrustManager[] { tm }, null);  
  46.     }  
  47.   
  48.     @Override  
  49.     public Socket createSocket(Socket socket, String host, int port,  
  50.             boolean autoClose) throws IOException, UnknownHostException {  
  51.         return sslContext.getSocketFactory().createSocket(socket, host, port,  
  52.                 autoClose);  
  53.     }  
  54.   
  55.     @Override  
  56.     public Socket createSocket() throws IOException {  
  57.         return sslContext.getSocketFactory().createSocket();  
  58.     }  
  59. }  

再写一个公共方法 方便调用

[java] view plaincopy
  1. public static HttpClient getNewHttpClient() {  
  2.            try {  
  3.                KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());  
  4.                trustStore.load(nullnull);  
  5.            
  6.                SSLSocketFactory sf = new SSLSocketFactoryEx(trustStore);  
  7.                sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);  
  8.            
  9.                HttpParams params = new BasicHttpParams();  
  10.                HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);  
  11.                HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);  
  12.            
  13.                SchemeRegistry registry = new SchemeRegistry();  
  14.                registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));  
  15.                registry.register(new Scheme("https", sf, 443));  
  16.            
  17.                ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);  
  18.            
  19.                return new DefaultHttpClient(ccm, params);  
  20.            } catch (Exception e) {  
  21.                return new DefaultHttpClient();  
  22.            }  
  23.         }  
如果你请求的是https

那么就可以

HttpPost post=new HttpPost(URI.create(urlString));
// HttpClient httpClient=new DefaultHttpClient();原来滴
HttpResponse response=getNewHttpClient().execute(post);

执行正常

原创粉丝点击