您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页Android HttpClient 访问 Tomcat双向SSL验证服务器

Android HttpClient 访问 Tomcat双向SSL验证服务器

来源:化拓教育网


Android HttpClient 访问 Tomcat双向SSL验证服务器

项目需要,在Android WebView上访问Tomcat SSL双向验证。本文只解决了Android HttpClient 访问Tomcat双向SSL验证服务器。

环境准备:

 Windows 2003 EE;

 OpenSSL;

 Tomcat 7;

过程记录如下:

1.用OpenSSL和keytools做CA,Client,Server的证书、私钥。

2.搭建Tomcat的双向验证的Web服务器。

3.用IE验证SSL的双向验证的有效性。

上面的三步参见文档: tomcat下https ssl 双向认证

唯一的问题是:Tomcat7的配置不同。

server.xml 加入如下XML代码:

className=\"org.apache.catalina.connector.http.HttpConnector\"

protocol=\"org.apache.coyote.http11.Http11NioProtocol\"

port=\"8443\" minSpareThreads=\"5\" maxSpareThreads=\"75\"

enableLookups=\"true\" disableUploadTimeout=\"true\"

acceptCount=\"100\" maxThreads=\"200\"

scheme=\"https\" secure=\"true\" SSLEnabled=\"true\"

clientAuth=\"true\" sslProtocol=\"TLS\"

keystoreFile=\"C:/OpenSSL/server/server_keystore\"

keystorePass=\"66666\"/>

keystorePass 是自己server_keystore的密码

单向验证把clientAuth=\"true\" 修改为false

4.编写Android的SSL验证程序,但只能做到单向验证服务器的证书。

Android OpenSSL分析及实例 - zhenyongyuan123的专栏

5.编写Java版本的Client/Server程序验证SSL的双向验证。

java实现 SSL双向认证

6.为了了解SSL的握手过程,测试用OpenSSL命令行直接验证Tomcat的SSL双向验证过程。

用openssl连接TomCat SSL双向验证的命令行。

view plaincopy to clipboardprint?

01.openssl s_client -connect localhost:8443 -cert client\\client-cert.pem -key client\\client-key.pem -CAfile ca\\ca-cert.pem -state

openssl s_client -connect localhost:8443 -cert client\\client-cert.pem -key client\\client-key.pem -CAfile ca\\ca-cert.pem -state

7.通过上面的过程,发现了步骤4的问题所在,解决了Android访问TomCat的双向SSL验证的WEB服务器。

8.最有一步,直接用Android 的WebView访问Tomcat的双向SSL服务器,正在研究中... 可能需要修改WebView的源码,研究完成单独书写文档表述实现方法。

tomcat下https ssl 双向认证

一、配置环境

1.1 Tomcat简介

Tomcat是Apache Jakarta的子项目之一,作为一个优秀的开源web应用服务器,全面支持jsp1.2以及servlet2.3规范。因其技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的web应用服务器。

1.2 SSL(Server Socket Layer)简介

在网络上信息在源-宿的传递过程中会经过其它的计算机。一般情况下,中间的计算机不会监听路过的信息。但在使用网上银行或者进行信用卡交易的时候有可能被监视,从而导致个人隐私的泄露。由于Internet和Intranet体系结构的原因,总有某些人能够读取并替换用户发出的信息。随着网上支付的不断发展,人们对信息安全的要求越来越高。因此Netscape公司提出了SSL协议,旨在达到在开放网络(Internet)上安全保密地传输信息的目的,这种协议在WEB上获得了广泛的应用。 之后IETF(www.ietf.org)对SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小。

1.3 SSL工作原理

SSL协议使用不对称加密技术实现会话双方之间信息的安全传递。可以实现信息传递的保密性、完整性,并且会话双方能鉴别对方身份。不同于常用的http协议,我们在与网站建立SSL安全连接时使用https协议,即采用https://ip:port/的方式来访问。

当我们与一个网站建立https连接时,我们的浏览器与Web Server之间要经过一个握手的过程来完成身份鉴定与密钥交换,从而建立安全连接。具体过程如下:

1. 用户浏览器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送到服务器。

2. 服务器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送给浏览器,同时发给浏览器的还有服务器的证书。如果配置服务器的SSL需要验证用户身份,还要发出请求要求浏览器提供用户证书。

3. 客户端检查服务器证书,如果检查失败,提示不能建立SSL连接。如果成功,那么继续。

4. 客户端浏览器为本次会话生成pre-master secret,并将其用服务器公钥加密后发送给服务器。

5. 如果服务器要求鉴别客户身份,客户端还要再对另外一些数据签名后并将其与客户端证书一起发送给服务器。

6. 如果服务器要求鉴别客户身份,则检查签署客户证书的CA是否可信。如果不在信任列表中,结束本次会话。如果检查通过,服务器用自己的私钥解密收到的pre-master

secret,并用它通过某些算法生成本次会话的master secret。

7. 客户端与服务器均使用此master secret生成本次会话的会话密钥(对称密钥)。在双方SSL握手结束后传递任何消息均使用此会话密钥。这样做的主要原因是对称加密比非对称加密的运算量低一个数量级以上,能够显著提高双方会话时的运算速度。

8. 客户端通知服务器此后发送的消息都使用这个会话密钥进行加密。并通知服务器客户端已经完成本次SSL握手。

9. 服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。并通知客户端服务器已经完成本次SSL握手。

10. 本次握手过程结束,会话已经建立。双方使用同一个会话密钥分别对发送以及接受的信息进行加、解密。

1.4 所需软件包

Tomcat 4.0.6

用途:Web Server。

下载:

http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.6/bin/jakarta-tomcat-4.0.6.exe

JDK1.4.1_02

其中已经包含了JSSE的最新版本。

JSSE 1.0.3_01

用途:用来产生Tocmcat使用的密钥对(keystore)。

下载: http://java.sun.com/products/jsse/

Openssl 0.9.7b

用途:用来产生CA证书、签名并生成IE可导入的PKCS#12格式私钥。

下载:http://www.openssl.org/

1.5 软件包的安装

Tomcat 4.0.6安装(略)

JSSE 1.0.3_01安装

1. 确定有JDK1.2以上版本(java -version);

2. 下载JSSE (注意,JDK1.4已经自带JSSE了,不需要),一般来说都只能download全球版本(还有个版本是美国/加拿大版本,加密位数没有);

3. 安装JSSE,主要是把JSSE包内的lib/*.jar拷贝到JAVA_HOME/jre/lib/ext/下,并且加入到CLASSPATH中;

4. 编辑JAVA_HOME/jre/lib/security/java.security文件,主要是添加:

security.provider.1=sun.security.provider.Sun security.provider.2=com.sun.net.ssl.internal.ssl.Provider

5. 确定你的系统有下面文件的其中一个:

1)JAVA_HOME/jre/lib/security/jssecacerts或者

2)JAVA_HOME/jre/lib/security/cacerts

你的系统已经安装好了JSSE,下面就是针对不同的server有不同的配置了。

Openssl 0.9.7b安装

请阅读其解压缩文档中的INSTALL文件安装openssl。

或者可以参考文件“openssl在windows平台的安装编译.txt”。

二、配置步骤

2.1 建立自己的CA证书(假设openssl安装到了c:\\openssl)

1.在适当的地方建立自己的CA目录,例如:ca

2. 我的电脑-〉右键-〉属性-〉高级-〉环境变量-〉新建->administrator用户变量-〉变量名:OPENSSL_CONF->变量值:C:\\openssl\\ssl\\openssl.cnf

2.生成CA密钥

openssl genrsa -out ca/ca-key.pem 1024

genrsa [产生密钥命令] –out[密钥文件输出路径] 1024 [密钥位数]

3.生成待签名的证书

openssl req -new -out ca/ca-req.csr -key ca/ca-key.pem

req[产生证书命令]-new[新生成]-out[证书文件输出路径]-key[私钥文件路径]

4.用CA私钥自签名

openssl x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-key.pem -days 365

x509[签发x509证书命令]-req[输入待签发证书]-in[输入待签发证书文件路径]-out[产生x509证书文件输出路径]-signkey[自签发密钥文件路径]-days[证书有效期]–CA[签发跟证书]-Cakey[根证书密钥文件] –-CAcreateserial[创建序列号]

2.2 配置Tomcat 4.X

2.2.1建立服务器证书

[注] 在本文中用符号\"%JDK_HOME%\"来表示JDK的安装位置,用符号\"%TCAT_HOME%\" 表示Tomcat的安装位置。

1.建立工作目录

在目录下建立自己的server目录,例如:server

2.生成server密钥对

C:\\j2sdk1.4.1_01\\bin\\keytool -genkey -alias tomcat -validity 365 -keyalg RSA -keysize 1024 -keystore server/server_keystore

-genkey[产生密钥对]-alias[密钥对别名]-validity[密钥有效期]-keyalg[密钥算法参数]-keysize[密钥位数]-keypass[密钥保护密码]-storepass[存储密码]-dname[别名相关附加信息]-keystore[密钥存储文件路径]

[注] -alias后的tomcat是密钥对的名字可替换为自己需要的名字;

-keypass与-storepass后的密码为保护密码必须6位;

其中cn是服务器的名字一定要与WEB服务器中设置的一样。

3.生成待签名证书

C:\\j2sdk1.4.1_01\\bin\\keytool -certreq -alias tomcat -sigalg MD5withRSA -file server/server.csr -keypass allcom -keystore server/server_keystore -storepass allcom

-certreq[产生待签名证书]-alias[证书别名]-sigalg[证书算法参数]-file [产生文件输出路径]-keypass[密钥保护密码]-keystore[存储文件路径]-storepass[存储密码]

4.拷贝C:\\openssl\\apps\\ca-cert.srl文件到ca目录

5.用CA私钥签名

openssl x509 -req -in server/server.csr -out server/server-cert.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -days 365

2.2.2将CA根证书和服务器证书导入Tomcat

1. 导入CA根证书

C:\\j2sdk1.4.1_01\\bin\\keytool -import -v -trustcacerts -storepass allcom -alias allcom_ca_root -file ca/ca-cert.pem -keystore server/cacerts

-import[导入命令] -v–trustcacerts[导入信任证书] –storepass[存储密码]-alias[证书别名]-file[证书文件路径]-keystore[导入文件路径]-alias为CA根证书的别名。

2.拷贝cacerts文件到C:\\j2sdk1.4.1_01\\jre\\lib\\security目录

3.导入服务器证书

C:\\j2sdk1.4.1_01\\bin\\keytool -import -v -trustcacerts -storepass allcom -alias tomcat -file server/server-cert.pem -keystore server/server_keystore

[注] 此时的-storepass为生成证书时输入密码。-alias为服务器证书的别名。

4.查看证书

查看CA证书

C:\\j2sdk1.4.1_01\\bin\\keytool -list -keystore server/cacerts

查看服务器证书

C:\\j2sdk1.4.1_01\\bin\\keytool -list -keystore server/server_keystore

2.2.3修改Tomcat的配置文件

1.把文件server/ server_keystore复制到目录%TCAT_HOME%/conf下

2.修改conf目录下server.xml文件找到以下内容去掉其注释并修改。

port=\"8443\" minProcessors=\"5\" maxProcessors=\"75\"

enableLookups=\"false\"

acceptCount=\"10\" debug=\"0\" scheme=\"https\" secure=\"true\">

clientAuth=\"true\" protocol=\"TLS\"

keystoreFile=\"c:/tomcat 4.0.6/conf/server_keystore\" keystorePass=\"allcom\"/>

2.3 配置IE客户端

2.3.1建立Client证书

1.建立自己的Client目录,例如:client

2.生成Client密钥对

openssl genrsa -out client/client-key.pem 1024

3.生成待签名的证书

openssl req -new -out client/client-req.csr -key client/client-key.pem

4.用CA私钥签名

openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 365

5.生成Client端可以导入的个人证书

openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey

client/client-key.pem -out client/client.p12

pkcs12[生成PKS12格式证书命令]-export[导出文件]-clerts[仅导出client证书]-in[输入的client证书文件路径]-inkey[client证书密钥文件路径]-out[导出PKS12格式文件路径]

2.3.2将CA证书与client证书导入IE

1. 导入CA根证书

将目录ca中的ca-cert.pem改名为ca-cert.cer;

在client端的IE中使用<工具>,< Internet选项>,<内容>,<证书>,<导入>,把我们生

成的CA根证书导入,使其成为用户信任的CA。

2. 导入client证书

将client证书(client.p12)导入到client端的IE中作为client证书,导入过程同上

三 用IE浏览器使用SSL协议访问Tomcat

1. 执行%TCAT_HOME%/bin/startup.bat启动Tomcat 4.0.6;

2. 在IE浏览器的地址栏中输入https://localhost:8443,如果前面的操作都正确,应该可以看到网站静态导出的页面,在这之前,IE提示你是否访问安全页面。同时状态栏上的小锁处于闭合状态,表示您已经成功地与服务器建立了要求客户端验证的SSL安全连接

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务