如果不需要验证服务器端证书,直接照这里做。
-
- 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);
-
复制代码
问1:这里用"PKCS12"不行
答1:PKCS12和JKS是keystore的type,不是Certificate的type,所以X.509不能用PKCS12代替
问2:这里用"JKS"不行。
答2:android平台上支持的keystore type好像只有PKCS12,不支持JKS,所以不能用JKS代替在PKCS12,不过在windows平台上是可以代替的
分享到:
相关推荐
Android创意实例详解书籍源码,分享一下Android创意实例详解书籍源码
Android核心技术与实例详解 第2版
《Android核心技术与实例详解》以Android应用程序的开发为主题,并结合真实的案例向读者详细介绍了.Android的基本组件的使用及...未经许可,不得以任何方式复制或抄袭《Android核心技术与实例详解》之部分或全部内容。
android核心技术与实例详解光盘源代码13---18章
资源名称:Android核心技术与实例详解 第2版内容简介:《Android核心技术与实例详解(第2版)(畅销书再版)》以Android应用程序的开发为主题,结合真实的案例向读者详细介绍了Android基本组件的使用及应用程序开发的...
资源名称:Android创意实例详解内容简介:《Android创意实例详解》全书分为3个部分,共12章,全面涵盖了Android底层框架、通信应用程序开发、本地数据应用、网络数据应用、盈利模式分析以及云计算服务应用等多个开发...
《Android核心技术与实例详解》随书光盘.part1.rar
包括《Android核心技术与实例详解源码》一书的电子版和各章源码,非常详细,可作为安卓开发初学者入门教程
Android核心技术与实例详解全书.pdf 高清下载
主要介绍了Android 跨进程模拟按键(KeyEvent )实例详解的相关资料,类似手机遥控器的需求就可以这么做,需要的朋友可以参考下
《Android核心技术与实例详解》共十八个章节的所有源代码
《Android创意实例详解》源代码
本文实例讲述了Android亮屏和熄屏控制实现方法。分享给大家供大家参考,具体如下: 一、概述 我们的Android应用程序很多需要和亮屏和熄屏打交道,比如闹钟的时候,需要保持亮屏,之后又需要熄屏。那么今天,我们来...
这是《Android核心技术与实例详解》一书的书后源码,从第1章到第18都有,还有最后三章案例开发的PPT讲义。 看到有人居然要10分,所以我就上传了,以供更多的人能够使用!要2分不为过吧!
该代码是一个完整的Android工程,详细演示如了如何使用Android中的各种drawXXX方法,以及画笔Paint如何影响绘制的效果。 具体参见博文: http://blog.csdn.net/iispring/article/details/49770651
Android核心技术与实例详解 随书源码 原书地址:http://download.csdn.net/detail/su_xiaoyan/7976991
Android NDK入门 实例 详解