`

android httpclient https 单向连接tomcat

 
阅读更多
双向篇还未实现,先记录单向验证方式。?
一 Android直接连接tomcat?
这个实现比较简单,先建立一个工作目录为tomcat。打开命令行切换到该目录。如果是win7需要用管理员身份打开命令行。?

1 生成服务器端私钥(or 公钥?)?
keytool -genkey -alias tomcat -keyalg RSA -keystore server.keystore -validity 3600?
解释:keytool是jdk下的命令行工具。?
alias 随意指定,表示别名。keyalg表示加密算法为RSA,输出文件为server.keystore?
这里面需要输入密码(我们输入123456),另外注意“您的名字与姓氏是什么?”,这一项要输入tomcat所在主机的IP或域名,客户端访问tomcat时会涉及到这个地址。?

2 用server.keystore生成server.cer?
keytool -export -alias tomcat?-file server.cer -keystore server.keystore -storepass 123456?

解释:这个是浏览器可以识别的证书,用于导入浏览器。?
这个时候tomcat就可以启动ssl了,以tomcat6.0为例,在server.xml中拷入(或是更改)如下片段:?
<Connector SSLEnabled="true" acceptCount="100" clientAuth="false" disableUploadTimeout="true" enableLookups="true" keystoreFile="D:/cer/tomcat/server.keystore" keystorePass="123456" maxSpareThreads="75" maxThreads="200" minSpareThreads="5" port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true" sslProtocol="TLS"/>?
其中clientAuth="false" ,目前只搞定了单向验证。?

这时启动tomcat,打开IE,输入https://ip:8443/?会提示没有证书,但能点进去。?
我们可以双击刚才生成的server.cer,把它导入“受信任的根证书颁发机构”,就能看到浏览器上的小锁了。?

那我们的Android程序怎么来连接服务器呢,我们需要生成第三个文件server_trust.keystore:?
3 keytool -import -alias tomcat -file server.cer -keystore server_trust.keystore -storepass 123456 -storetype BKS -providername "BC"?
注意:这里的密码与前面保持一致。因为Android只支持BKS格式的,所以这里要指定类型。?
你执行到这里可能会出错,因为jdk下的keytool默认没有BKS的类库。?
我们需要下载bcprov-jdk15-135.jar及sunjce_provider.jar,放入jdk1.6.0_10\jre\lib\ext下面。同时要修改jdk1.6.0_10\jre\lib\security\java.security?
找到security.provider.1=sun.security.provider.Sun这行,这里有好几行,在最后一行加上security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider,我本来有9号,所以新一行的序号为10。?

我们把server_trust.keystore拷入Android程序的res/raw目录下。?
使用httpClient进行连接,示例代码如下:?
HttpClient hc = new DefaultHttpClient();?
initKey();?
String url = "https://10.1.32.33:8443/SSLTestServer/SSLServlet?action=login";?
Toast.makeText(SSLTestAndroidActivity.this, getData(url), 1).show();?

private void initKey() throws Exception {?
KeyStore trustStore = KeyStore.getInstance("BKS");?
trustStore.load(getBaseContext().getResources().openRawResource(R.raw.server_trust), "123456".toCharArray());?

SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);?
Scheme sch = new Scheme("https", socketFactory, 8443);?
hc.getConnectionManager().getSchemeRegistry().register(sch);?
}?

private String getData(String url) throws Exception {?
HttpUriRequest hr = new HttpGet(url);?
HttpResponse hres = hc.execute(hr);?
HttpEntity he = hres.getEntity();?
InputStream is = he.getContent();?
StringBuffer sb = new StringBuffer();?
byte[] bytes = new byte[1024];?
for (int len = 0; (len = is.read(bytes)) != -1;) {?
sb.append(new String(bytes, 0, len, "gb2312"));?
}?
return sb.toString();?
}?

对应的servlet中只是简单的response.getWriter().write("some char");?

至此Android连接tomcat进行单向ssl就大功告成了,只需要生成三个文件。





?

分享到:
评论

相关推荐

    Android HttpClient用到的jar包

    本篇将详细讲解如何利用Apache HttpClient及其相关的jar包在Android环境中进行文件上传。 首先,我们关注的是标题提到的两个jar包:“apache-mime4j-0.6.jar”和“httpmime-4.0.jar”。这两个jar包是HttpClient库的...

    AndroidHttpClient访问Tomcat双向SSL验证服务器.pdf

    ### AndroidHttpClient访问Tomcat双向SSL验证服务器 #### 环境与背景介绍 本文主要讨论如何使用`AndroidHttpClient`访问`Tomcat`双向SSL验证服务器的相关技术和实施步骤。本项目的目标是在`Android WebView`上成功...

    android HttpClient访问Https

    android HttpClient访问某些Https时,出现了问题,无法访问,好像是要安全验证。此Demo解决了此问题,HttpClient能够Https和Http类型的URL了。 在eclipse下打开工程若有乱码,请把eclipse的字符编码改成UTF-8。

    Android HttpClient工具类

    本篇文章将深入探讨Android HttpClient的基本使用方法,帮助开发者理解和应用这个工具。 首先,我们来了解HttpClient的核心组件: 1. **HttpClient实例**:这是所有操作的基础,通过`HttpClient client = new ...

    Android Httpclient Proxy Test

    本文将深入探讨如何在Android中使用HttpClient进行代理设置,并结合具体的例子来阐述相关知识点。 首先,了解`HttpClient`是Apache的一个开源库,它提供了一个强大的、功能丰富的HTTP客户端API,使得开发者可以方便...

    android httpClient所需jar包

    3. **httpclient-4.5.6.jar**: 这是HttpClient的较新版本,相对于commons-httpclient,它有更多改进和优化,包括更好的性能、更完善的错误处理、对HTTPS的支持以及对HTTP/1.1和HTTP/2的兼容性。 4. **ksoap2-...

    android httpclient demo

    在Android开发中,HTTP通信是应用与服务器交互的重要方式之一,`Android HttpClient`库就是用于实现这一功能的工具。本文将深入探讨如何使用`Android HttpClient`进行HTTP请求,包括GET、POST、PUT和DELETE等常见...

    使用httpClient访问https+443端口号。

    标题中的“使用httpClient访问https+443端口号”指的是使用Apache HttpClient库来发起HTTPS(安全超文本传输协议)请求,目标服务器的默认端口是443。HTTPS是一种基于SSL/TLS的安全通信协议,用于在客户端和服务器...

    android HttpClient

    在Android应用程序中,`HttpClient`经常被用于实现网络通信,比如上传或下载文件。下面将详细讨论`HttpClient`在Android中的应用及其相关知识点。 一、`HttpClient`基础 1. `HttpClient`类:它是整个框架的核心,...

    Android HttpClient与Json解析

    首先,我们需要了解如何使用Android的HttpClient。在Android SDK中,`org.apache.http.impl.client.DefaultHttpClient`是主要的HttpClient实现。创建一个HttpClient实例后,你可以通过`HttpGet`或`HttpPost`对象来...

    Android HttpClient源码

    在这个"Android HttpClient源码"中,我们可以深入理解其内部工作原理,并学习如何在Android应用中有效地使用它。 首先,HttpClient的核心类是`HttpClient`,它是整个HTTP客户端操作的管理者。通过`HttpClient`,...

    struts2 android httpclient 上传文件

    Struts2、Android和HttpClient是三个关键的技术领域,它们在本次文件上传的场景中相互结合。Struts2是一个流行的Java Web框架,用于构建MVC(模型-视图-控制器)结构的应用程序。Android是Google开发的移动操作系统...

    android httpClient

    在请求中,我们需要指定歌曲的URL,HttpClient会处理连接、请求头和响应头等细节。 2. **存储管理**:将下载的歌曲保存到SD卡(外部存储)需要遵循Android的存储权限和API。在Android 6.0(Marshmallow)及以后版本...

    httpClient连接https 获得验证码图片示例

    httpClient连接https 获得验证码图片示例 需要证书才能连接的那种 /* 本文所用开发工具 jak1.5.0_06 eclipse:ObjectWeb Lomboz lib: commons-codec-1.4.jar commons-logging-1.1.jar httpclient-4.0.3.jar ...

    android httpclient

    android9.0不再支持useLibrary 'org.apache.http.legacy'引入httpclient,需要引入jar

    Android使用HttpClient和HttpsUrlConnection两种方式访问https网站

    `HttpClient`和`HttpsURLConnection`都是Android中访问HTTPS网站的手段,各有优缺点。`HttpClient`功能更强大,但占用资源较多;`HttpsURLConnection`则轻量级,更适合现代Android开发。在实际应用中,应根据项目...

    Android_HttpClient_jar包

    Android使用HttpClient发送请求、接收响应很简单,只要如下几步即可: Step1:创建HttpClient对象; Step2:如果需要发送GET请求,则创建HttpGet对象; 如果需要发送POST请求,则创建HttpPost对象; Step3:如果...

    JAVA利用HttpClient进行HTTPS接口调用

    此外,还需要创建一个SSLConnectionSocketFactory,它是HttpClient中的关键组件,负责建立安全的SSL/TLS连接。 接下来,`HttpClientUtil.java`文件可能是实现HttpClient工具类,提供一个静态方法来创建和初始化...

    android HttpClient 获取网络图片

    android HttpClient 获取网络图片 实例

    HttpClient Https实战

    这篇博客“HttpClient Https实战”很可能详细介绍了如何使用HttpClient库来处理HTTPS连接,这是在互联网安全通信中不可或缺的一部分。 HttpClient库提供了丰富的API,使得开发者可以方便地发送GET、POST等各种HTTP...

Global site tag (gtag.js) - Google Analytics