android中进行https连接的方式

如果不需要验证服务器端证书,直接照这里做


public class Demo extends Activity {  
    /** Called when the activity is first created. */  
        private TextView text;  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        text = (TextView)findViewById(R.id.text);  
        GetHttps();  
    }  
      
    private void GetHttps(){  
            String https = " https://800wen.com/";  
            try{  
                    SSLContext sc = SSLContext.getInstance("TLS");  
                    sc.init(null, new TrustManager[]{new MyTrustManager()}, new SecureRandom());  
                    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());  
                    HttpsURLConnection.setDefaultHostnameVerifier(new MyHostnameVerifier());  
                    HttpsURLConnection conn = (HttpsURLConnection)new URL(https).openConnection();  
                    conn.setDoOutput(true);  
                    conn.setDoInput(true);  
                    conn.connect();  
                      
                     BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));   
             StringBuffer sb = new StringBuffer();   
             String line;   
             while ((line = br.readLine()) != null)   
                     sb.append(line);   
                      
                    text.setText(sb.toString());  
                      
            }catch(Exception e){  
                    Log.e(this.getClass().getName(), e.getMessage());  
            }  
              
    }  
      
    private class MyHostnameVerifier implements HostnameVerifier{  
  
                @Override  
                public boolean verify(String hostname, SSLSession session) {  
                        // TODO Auto-generated method stub  
                        return true;  
                }  
    }  
      
    private class MyTrustManager implements X509TrustManager{  
  
                @Override  
                public void checkClientTrusted(X509Certificate[] chain, String authType)  
                                throws CertificateException {  
                        // TODO Auto-generated method stub  
                          
                }  
  
                @Override  
                public void checkServerTrusted(X509Certificate[] chain, String authType)  
                                throws CertificateException {  
                        // TODO Auto-generated method stub  
                          
                }  
  
                @Override  
                public X509Certificate[] getAcceptedIssuers() {  
                        // TODO Auto-generated method stub  
                        return null;  
                }          
    }    
}  


如果需要验证服务器端证书(这样能够防钓鱼),我是这样做的,还有些问题问大牛:
    a. 导出公钥。在浏览器上用https访问tomcat,查看其证书,并另存为一个文件(存成了X.509格式:xxxx.cer)
    b. 导入公钥。把xxxx.cer放在Android的assets文件夹中,以方便在运行时通过代码读取此证书,留了两个问题给大牛:


AssetManager am = context.getAssets();  
InputStream ins = am.open("robusoft.cer");  
try {  
        //读取证书  
        CertificateFactory cerFactory = CertificateFactory.getInstance("X.509");  //问1  
        Certificate cer = cerFactory.generateCertificate(ins);  
        //创建一个证书库,并将证书导入证书库  
        KeyStore keyStore = KeyStore.getInstance("PKCS12", "BC");   //问2  
        keyStore.load(null, null);  
        keyStore.setCertificateEntry("trust", cer);  
        return keyStore;  
} finally {  
        ins.close();  
}  
//把咱的证书库作为信任证书库  
SSLSocketFactory socketFactory = new SSLSocketFactory(keystore);  
Scheme sch = new Scheme("https", socketFactory, 443);  
//完工  
HttpClient mHttpClient = new DefaultHttpClient();  
mHttpClient.getConnectionManager().getSchemeRegistry().register(sch); 


转载地址:点击打开链接



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值