- 浏览: 130511 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (130)
- java基础 (9)
- java高级 (19)
- struts2.x (2)
- spring (1)
- hibernate (1)
- jpa (1)
- ibatis (2)
- javascript (4)
- jsp (2)
- sql (9)
- oracle (12)
- extjs (0)
- uml (0)
- 关于面试 (4)
- 常用软件晋级 (5)
- 网络编程 (1)
- XML (1)
- servlet (5)
- jquery (6)
- Tomcat (3)
- Android (17)
- ssl (1)
- c 指针 (0)
- c/c++/oc (3)
- ios (7)
- 设计模式 (0)
- 终端命令 mac (2)
- sqlite3 (1)
- linux (7)
- hadoop (2)
- 特效 (3)
- 架构之路 (2)
- p2p (1)
- 常见问题 (0)
- html (1)
最新评论
-
zaocha321:
建议改一下文章中的错别字。
多线程(二) -
shamusoft:
在iPhone上是采用sqlite进行数据存储是我一种比较习惯 ...
sqlite3 相关操作 -
bear1122ccc:
这是给学习IOS的人打气呀。顶下。
初学ios -
shamusoft:
<Connector className="o ...
SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程) -
shamusoft:
去掉拖动ListView带有的黑色背景: and ...
关于加密
双向篇还未实现,先记录单向验证方式。?
一 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直接连接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就大功告成了,只需要生成三个文件。
?
发表评论
-
maven 学习参考文章
2015-02-10 09:06 534maven环境快速搭建 http://www.cn ... -
用struts 包控制权限的文章
2015-01-09 09:23 526http://www.cnblogs.com/Johness/ ... -
IE 兼容模式 quirks 网页变形
2014-11-27 23:14 608http://www.cnblogs.com/0000/ar ... -
oracle 日期操作
2014-10-16 16:53 606Oracle 获取当前日期及日期格式 获取系统日期: ... -
freemark hellword
2014-09-11 20:32 9271、所需的材料: 主料: myeclipse(我用的版 ... -
学习FreeMaker
2014-04-10 16:41 592原文地址 :http://tailshe ... -
JSONOBJ 转换对象
2013-12-22 13:13 960import java.lang.reflect.Field ... -
p2p 企业信贷 UML 跨行清算
2013-12-07 23:09 587p2p 银行业务 http://blog.csdn.net ... -
glassfish 集群
2013-12-05 14:35 728感谢猫咪文章,在此做 ... -
c语言的指针
2012-02-27 09:08 783C语言中的精华是什么,答曰指针,这也是C语言中唯一的难点。 C ... -
本地域名解析操作步骤:
2012-02-22 09:40 01.打开C:\WINDOWS\system32\drive ... -
SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)
2012-02-14 08:57 1559SSL协议的工作流程: ... -
关于加密
2011-12-27 14:01 940keytool -genkey -alias shamusof ... -
jdk1.5新特性 增强for循环
2011-06-03 06:52 817[code="java"] ... -
用反射实现通用Dao
2011-05-26 16:56 1404public class MySession { /** ... -
反射泛型注解
2011-05-26 07:47 1609一、反射 1. 一段java代码在程序运行期间会经历三个阶段 ... -
代理实现过滤器例子
2011-05-26 07:29 889package cn.itcast.proxy; imp ... -
动态代理 测试代码
2011-05-26 06:25 680import java.lang.reflect.Constr ... -
工厂模式
2011-05-10 10:39 604分析:工厂模式 工厂模式目的就是解耦。解耦目的是为了一个类的 ...
相关推荐
Httpclient上传文件,非常有用的jar包 apache-mime4j-0.6.jar httpmime-4.0.jar
android HttpClient访问某些Https时,出现了问题,无法访问,好像是要安全验证。此Demo解决了此问题,HttpClient能够Https和Http类型的URL了。 在eclipse下打开工程若有乱码,请把eclipse的字符编码改成UTF-8。
Android HttpClient基本使用方法 测试过能用。
AndroidHttpClient访问Tomcat双向SSL验证服务器.pdf
struts2 android httpclient 上传文件 客服端 服务器端 亲测通过
这是一个用Httpclient设置代理下载文件的例子
利用 android httpclient 编写http协议的例子代码,可以参考添加post,get ,put delete 等功能。工程师文件可以直接编译运行。
该Demo主要介绍使用HttpClient获取网络数据,然后经过JSON后显示出来。另外本文章用到了常用的异步加载技术,AsyncTask类。
android9.0不再支持useLibrary 'org.apache.http.legacy'引入httpclient,需要引入jar
android应用开发 httpClient所需jar包 和调用webservice 工具ksoap2 jar 包
android的Http上载文件 可以实现多文件上载,结合android自身白日提供的强大的HttpClient操作。
Android利用HttpClient实现访问web服务器源码 剥离出HttpClient代码,用来做网页爬虫亦可
android HttpClient 获取网络图片 实例
下面给大家展示了AndroidHttpClient结构: public final class AndroidHttpClient extends Object implements HttpClient 前言: 这类其实是Google对阿帕奇的HttpClient的一个封装,一些默认属性有android做了一些...
是android的jar中httpclient的源码,是org.apache.http包的源码。其中包含org.apache.http.HttpResponse类。 不是官网上下载的,官网上的源码里面没有org.apache.http.HttpResponse这个类。
Android-异步HttpClient框架,采用两种提交方式 Android-异步HttpClient框架(get和post) Android-异步HttpClient框架 csdn博客地址:http://blog.csdn.net/u014657752
Android 使用HttpClient代理
基于Android HttpClient的一个网络连接简单实现,附jar包及源码。
不会的可以在评论区留言哈,这是我自己做项目用到的。所以绝对可用!同时共享出来给到大家
keytool所需jar包 httpclient https所需jar包