Android Volley增加Https支持,允许SSL

Volley默认是不支持Https请求的。如果Https服务器是单向认证,则增加以下允许SSL就可以。

先增加SsX509TrustManager类,代码如下

[java]  view plain  copy
  1. package com.lakala.net.volley.toolbox;  
  2.   
  3. import java.security.KeyManagementException;  
  4. import java.security.NoSuchAlgorithmException;  
  5. import java.security.SecureRandom;  
  6. import java.security.cert.X509Certificate;  
  7.   
  8. import javax.net.ssl.HostnameVerifier;  
  9. import javax.net.ssl.HttpsURLConnection;  
  10. import javax.net.ssl.SSLContext;  
  11. import javax.net.ssl.SSLSession;  
  12. import javax.net.ssl.TrustManager;  
  13. import javax.net.ssl.X509TrustManager;  
  14.   
  15. /** 
  16.  * Volley允许HTTPS 
  17.  * 
  18.  * Created by yuyh on 15/12/28. 
  19.  */  
  20. public class SsX509TrustManager implements X509TrustManager {  
  21.     private static TrustManager[] trustManagers;  
  22.     private static final X509Certificate[] _AcceptedIssuers = new  
  23.             X509Certificate[]{};  
  24.   
  25.     @Override  
  26.     public void checkClientTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException {  
  27.         //To change body of implemented methods use File | Settings | File Templates.  
  28.     }  
  29.   
  30.     @Override  
  31.     public void checkServerTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException {  
  32.         //To change body of implemented methods use File | Settings | File Templates.  
  33.     }  
  34.   
  35.     public boolean isClientTrusted(X509Certificate[] chain) {  
  36.         return true;  
  37.     }  
  38.   
  39.     public boolean isServerTrusted(X509Certificate[] chain) {  
  40.         return true;  
  41.     }  
  42.   
  43.     @Override  
  44.     public X509Certificate[] getAcceptedIssuers() {  
  45.         return _AcceptedIssuers;  
  46.     }  
  47.   
  48.     /** 
  49.      * 允许所有的SSL请求,添加在new StringRequest()之前 
  50.      */  
  51.     public static void allowAllSSL() {  
  52.         HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {  
  53.   
  54.             @Override  
  55.             public boolean verify(String arg0, SSLSession arg1) {  
  56.                 // TODO Auto-generated method stub  
  57.                 return true;  
  58.             }  
  59.   
  60.         });  
  61.   
  62.         SSLContext context = null;  
  63.         if (trustManagers == null) {  
  64.             trustManagers = new TrustManager[]{new SsX509TrustManager()};  
  65.         }  
  66.   
  67.         try {  
  68.             context = SSLContext.getInstance("TLS");  
  69.             context.init(null, trustManagers, new SecureRandom());  
  70.         } catch (NoSuchAlgorithmException e) {  
  71.             e.printStackTrace();  
  72.         } catch (KeyManagementException e) {  
  73.             e.printStackTrace();  
  74.         }  
  75.   
  76.         HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());  
  77.     }  
  78.   
  79. }  

然后再new StringRequest()之前加上下面这句代码就可以了~~

[java]  view plain  copy
  1. // 允许SSL  
  2.         SsX509TrustManager.allowAllSSL();  
原文地址:http://blog.csdn.net/yyh352091626/article/details/50497027

你可能感兴趣的:(开源框架&项目)