利用Tomcat+Openssl在Android环境下完成CA签名的双向认证技术指导书文档格式.docx
- 文档编号:8480302
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:11
- 大小:22.21KB
利用Tomcat+Openssl在Android环境下完成CA签名的双向认证技术指导书文档格式.docx
《利用Tomcat+Openssl在Android环境下完成CA签名的双向认证技术指导书文档格式.docx》由会员分享,可在线阅读,更多相关《利用Tomcat+Openssl在Android环境下完成CA签名的双向认证技术指导书文档格式.docx(11页珍藏版)》请在冰点文库上搜索。
4.3签发客户证书8
4.4客户证书转换8
4.5查看证书8
5双向认证配置:
9
5.1Android客户端需要使用的文件9
5.2服务端需要使用的文件9
5.3配置tomcat服务器9
5.4验证9
5.4.1启动tomcat9
5.4.2Android中验证9
5.4.3利用PhoneGap插件11
6经验总结12
1配置环境
1.1Tomcat简介
Tomcat是ApacheJakarta的子项目之一,作为一个优秀的开源web应用服务器,全面支持jsp1.2以及servlet2.3规范。
因其技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的web应用服务器。
1.2SSL(ServerSocketLayer)简介
在网络上信息在源-宿的传递过程中会经过其它的计算机。
一般情况下,中间的计算机不会监听路过的信息。
但在使用网上银行或者进行信用卡交易的时候有可能被监视,从而导致个人隐私的泄露。
由于Internet和Intranet体系结构的原因,总有某些人能够读取并替换用户发出的信息。
随着网上支付的不断发展,人们对信息安全的要求越来越高。
因此Netscape公司提出了SSL协议,旨在达到在开放网络(Internet)上安全保密地传输信息的目的,这种协议在WEB上获得了广泛的应用。
之后IETF(www.ietf.org)对SSL作了标准化,即RFC2246,并将其称为TLS(TransportLayerSecurity),从技术上讲,TLS1.0与SSL3.0的差别非常微小。
1.3OpenSSL简介
众多的密码算法、公钥基础设施标准以及SSL协议,或许这些有趣的功能会让你产生实现所有这些算法和标准的想法。
果真如此,在对你表示敬佩的同时,还是忍不住提醒你:
这是一个令人望而生畏的过程。
这个工作不再是简单的读懂几本密码学专著和协议文档那么简单,而是要理解所有这些算法、标准和协议文档的每一个细节,并用你可能很熟悉的C语言字符一个一个去实现这些定义和过程。
我们不知道你将需要多少时间来完成这项有趣而可怕的工作,但肯定不是一年两年的问题。
EricA.Young和TimJ.Hudson,自1995年开始编写后来具有巨大影响的OpenSSL软件包,更令我们高兴的是,这是一个没有太多限制的开放源代码的软件包,这使得我们可以利用这个软件包做很多事情。
1998年,OpenSSL项目组接管了OpenSSL的开发工作,并推出了OpenSSL的0.9.1版,到目前为止,OpenSSL的算法已经非常完善,对SSL2.0、SSL3.0以及TLS1.0都支持。
OpenSSL采用C语言作为开发语言,这使得OpenSSL具有优秀的跨平台性能,这对于广大技术人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。
OpenSSL支持Linux、Windows、BSD、Mac、VMS等平台,这使得OpenSSL具有广泛的适用性。
不过,对于目前新成长起来的C++程序员,可能对于C语言的代码不是很习惯,但习惯C语言总比使用C++重新写一个跟OpenSSL相同功能的软件包轻松不少。
OpenSSL整个软件包大概可以分成三个主要的功能部分:
密码算法库、SSL协议库以及应用程序。
OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。
作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
对称加密算法
OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。
这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。
其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。
事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。
非对称加密算法
OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。
DH算法一般用户密钥交换。
RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。
DSA算法则一般只用于数字签名。
信息摘要算法
OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。
SHA算法事实上包括了SHA和SHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。
1.4所需软件包
1.4.1Tomcat6.0
用途:
WebServer。
1.4.2给JDK加上BouncyCaslet库
1.
把bcprov-jdk16-146.jar放到jdk1.6.xx\jre\lib\ext目录下(在jdk1.7下也可以使用)
2.
给jdk1.6.xx\jre\lib\security目录中的java.security文件增加提供者:
security.provider.n=org.bouncycastle.jce.provider.BouncyCastleProvider
n为优先级数字,顺着原来的数字往下些,可调整顺序但不可隔空跳过数字。
1.4.3Keytool命令详解
英文:
中文:
1.5参考资料
Tomcat\SSL\Openssl的相关资料。
2.1初始化设置
建立CA根证书目录及相关初始化设置
d:
\>
mkdirca
cdca
\ca>
mkdircerts
mkdircrl
mkdirnewcerts
mkdirprivate
echo0>
index.txt
ECHO处于打开状态。
echo01>
serial
opensslrand-outprivate/.rand1000
Loading'
screen'
intorandomstate-done
2.2构建根证书
下述过程需要输入密码,一律输入ca1234
2.2.1生成根证书私钥
opensslgenrsa-aes256-outprivate/ca.key.pem2048
2.2.2生成根证书请求
opensslreq-new-keyprivate/ca.key.pem-outprivate/ca.csr-subj"
/C=cn/ST=bj/L=bj/O=wd/OU=wd/CN=wdmobileCA"
2.2.3签发根证书(自签名方式)
opensslx509-req-days10000-sha1-extensionsv3_ca-signkeyprivate/ca.key.pem-inprivate/ca.csr-outcerts/ca.cer-trustout
2.2.4根证书转换
opensslpkcs12-export-clcerts-incerts/ca.cer-inkeyprivate/ca.key.pem-outcerts/ca.p12
keytool-importkeystore-srckeystorecerts/ca.p12-srcstoretypePKCS12-deststoretypeBKS-destkeystorecerts/ca.bks
2.2.5导出CA的公钥证书
keytool-importcert-trustcacerts-aliasca-filecerts/ca.cer-keystorecerts/ca_public.bks-storetypebks
2.2.6查看证书
keytool-list-keystorecerts/ca.p12-storetypepkcs12-v-storepassca1234
keytool-list-keystorecerts/ca.bks-storetypebks-v-storepassca1234
keytool-list-keystorecerts/ca_public.bks-storetypebks-v-storepassca1234
3为服务器生成证书
下述过程需要输入密码,一律输入wa1234
3.1生成服务器私钥
opensslgenrsa-aes256-outprivate/server.key.pem2048
3.2生成服务器证书请求
opensslreq-new-keyprivate/server.key.pem-outprivate/server.csr-subj"
/C=cn/ST=bj/L=bj/O=wd/OU=wd/CN=10.0.73.57"
3.3签发服务器证书
opensslx509-req-days3650-sha1-extensionsv3_req-CAcerts/ca.cer-CAkeyprivate/ca.key.pem-CAserialca.srl-CAcreateserial-inprivate/server.csr-outcerts/server.cer-trustout
此处输入ca.key.pem的密码为ca1234。
3.4服务器证书转换
opensslpkcs12-export-clcerts-inkeyprivate/server.key.pem-incerts/server.cer-outcerts/server.p12
keytool-importkeystore-srckeystorecerts/server.p12-srcstoretypePKCS12-deststoretypeBKS-destkeystorecerts/server.bks
3.5查看证书
keytool-list-keystorecerts/server.p12-storetypepkcs12-v-storepasswa1234
keytool-list-keystorecerts/server.bks-storetypebks-v-storepasswa1234
4为Android客户端生成证书
下述过程需要输入密码,一律输入cl1234
4.1生成客户私钥
opensslgenrsa-des3-outprivate/client.key.pem2048
4.2生成客户证书请求
opensslreq-new-keyprivate/client.key.pem-outprivate/client.csr-subj"
/C=cn/ST=bj/L=bj/O=wd/OU=wd/CN=wdmobile"
4.3签发客户证书
opensslx509-req-days3650-sha1-extensionsv3_req-CAcerts/ca.cer-CAkeyprivate/ca.key.pem-CAserialca.srl-CAcreateserial-inprivate/client.csr-outcerts/client.cer-trustout
4.4客户证书转换
opensslpkcs12-export-incerts/client.cer-inkeyprivate/client.key.pem-outcerts/client.p12
生成Android可以使用的Bks格式密钥库:
keytool-importkeystore-srckeystorecerts/client.p12-srcstoretypePKCS12-deststoretypeBKS-destkeystorecerts/client.bks
4.5查看证书
keytool-list-keystorecerts/client.p12-storetypepkcs12-v-storepasscl1234
keytool-list-keystorecerts/client.bks-storetypebks-v-storepasscl1234
5.1Android客户端需要使用的文件
client.bksca_public.bks
5.2服务端需要使用的文件
server.bksca_public.bks
5.3配置tomcat服务器
打开tomcat根目录下的/conf/server.xml,找到如下配置段,修改如下:
<
Connectorport="
8443"
protocol="
HTTP/1.1"
SSLEnabled="
true"
maxThreads="
150"
scheme="
https"
secure="
clientAuth="
sslProtocol="
TLS"
keystore="
\ca\certs\server.bks"
keystorePass="
wa1234"
keystoreType="
BKS"
truststoreFile="
\ca\certs\ca_public.bks"
truststorePass="
ca1234"
truststoreType="
emptySessionPath="
false"
/>
5.4验证
5.4.1启动tomcat
修改tomcat6.0\bin\catalina.bat文件,如:
setJAVA_OPTS=%JAVA_OPTS%%LOGGING_CONFIG%-D.debug=ssl中的红色部分。
然后启动tomcat可以查看SSL请求交互的详细日志信息。
5.4.2Android中验证
主要有3个步骤:
0.将ca.bks和client.bks放到res/raw目录下
1.双向认证初始化安全环境,2.请求待访问数据。
如下面的代码段:
1./**
*双向认证初始化安全环境
*@paramresid_key
*@parampassword_key
*@paramresid
*@parampassword
*@throwsException
*/
privatevoidinitKey2(intresid_key,Stringpassword_key,
intresid,Stringpassword)throwsException{
KeyStorekeyStore=KeyStore.getInstance(CLIENT_KEY_KEYSTORE);
keyStore.load(
MyApplication.getInstance().getContext()
.getResources().openRawResource(
resid_key),password_key.toCharArray());
KeyStoretrustStore=KeyStore.getInstance(CLIENT_TRUST_KEYSTORE);
trustStore.load(
resid),password.toCharArray());
SSLSocketFactorysocketFactory=newSSLSocketFactory(keyStore,password_key,trustStore);
Schemesch=newScheme("
socketFactory,8443);
hc.getConnectionManager().getSchemeRegistry().register(sch);
}
/**
*以POST方式请求数据
*@paramreqData请求数据
*@paramurl请求地址
*@return
privateStringpostData(StringreqData,Stringurl)throwsException{
HttpPosthr=newHttpPost(url);
hr.setEntity(newStringEntity(reqData));
HttpResponsehres=hc.execute(hr);
returnEntityUtils.toString(hres.getEntity(),"
utf-8"
);
}
2.try{
initKey2(R.raw.client,CLIENT_KEY_PASSWORD,R.raw.ca_public,CLIENT_TRUST_PASSWORD);
result=postData(reqData,url);
Log.i("
postresult:
"
result);
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
5.4.3利用PhoneGap插件
5.4.3.1在res/xml/plugins.xml加入一行
<
pluginname="
WdCertsPlugin"
value="
com.watchdata.phc.certs.WDCertsPlugin"
/>
5.4.3.2生成wdmobile.certs.js
varWdCertsPlugin=function(){
};
//way:
0,无认证;
1,单向认证;
2,双向认证。
//reqData:
请求数据
//url:
访问地址
//success:
成功时的回调函数
//error:
失败时的回调函数
WdCertsPlugin.prototype.post=function(way,port,reqData,url,success,error){
Cordova.exec(success,error,"
"
post"
[way,port,reqData,url]);
Cordova.addConstructor(function(){
Cordova.addPlugin("
wdCertsPlugin"
newWdCertsPlugin());
});
5.4.3.3在WDCertsPlugin.java中添加代码段
StringreqData=data.getString(0);
Stringurl=data.getString
(1);
JSONObjectfileInfo=newJSONObject();
//数据结果保存到json中
fileInfo.put("
result"
post(reqData,url));
result=newPluginResult(Status.OK,fileInfo);
5.4.3.4在页面调用
window.plugins.wdCertsPlugin.post("
2"
"
strs,url2,function(data,textStatus){
varstrData=JSON.stringify(data);
if($("
resultCode"
strData).text()=="
0000"
){
alert("
https登录成功!
wdMobileUi.mainui();
}else{
https登录失败\r\n失败信息:
+$("
strData).text()
+$("
resultDesc"
strData).text());
wdMobileUi.loginui();
}
},function(xmlHttpRequest,textStatus,errorThrown){
alert("
https网络异常或者远程服务器不可用!
+xmlHttpRequest.status);
});
6经验总结
经过大量的尝试,发现如果使用CA签名的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 Tomcat Openssl Android 环境 完成 CA 签名 双向 认证 技术 指导书
链接地址:https://www.bingdoc.com/p-8480302.html