第一节 基础知识
最近要做一个SSL的应用,先后了解了两个命令,一个是keytool,一个是openssl。keytool是JDK得集成环境。只要安装了JDK,基本上都会有(^_^,除非你安装太老的!),我用的1.5。 在安装openssl的时候,花了一段时间。因为在巨人的肩膀上,所以干起事来快许多。
-
1 基础知识
-
随 着网上支付的不断发展,人们对信息安全的要求越来越高。因此Netscape公司提出了SSL协议,旨在达到在开放网络(Internet)上安全保密地 传输信息的目的,这种协议在WEB上获得了广泛的应用。 之后IETF(ietf.org)对SSL作了标准化,即RFC2246,并将其称为 TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小。
-
-
SSL协议使用不对称加密技术实现会话双方之间信息的安全传递。可以实现信息传递的保密性、完整性,并且会话双方能鉴别对方身份。不同于常用的http协议,我们在与网站建立SSL安全连接时使用https协议,即采用https:
-
-
2.用到的软件包
-
Tomcat 6.0.8
-
用途:Web Server。
-
JSSE (jdk1.4以上版本包含有)
-
用途:用来产生Tocmcat使用的秘钥对(keystore)。
-
Openssl
-
用途:用来产生CA证书、签名并生成IE可导入的PKCS#12格式私钥。
-
下载:http:
-
-
JDK工具KEYTOOL
-
-genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥
-
、私钥和证书
-
-alias 产生别名
-
-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中
-
-keyalg 指定密钥的算法
-
-validity 指定创建的证书有效期多少天
-
-keysize 指定密钥长度
-
-storepass 指定密钥库的密码
-
-keypass 指定别名条目的密码
-
-dname 指定证书拥有者信息例如: "CN=firstName,OU=org,O=bj,L=bj,ST=gd,C=cn"
-
-list 显示密钥库中的证书信息 keytool -list -v -keystore 别名 -storepass ....
-
-v 显示密钥库中的证书详细信息
-
-export 将别名指定的证书导出到文件 keytool -export -alias 别名 -file 文件名.crt
-
-file 参数指定导出到文件的文件名
-
-delete 删除密钥库中某条目 keytool -delete -alias 别名 -keystore sage
-
-keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias 别名 -keypass .... -new .... -storepass ... -keystore 别名
-
-import 将已签名数字证书导入密钥库
-
keytool -import -alias 别名 -keystore 证书名-file 文件名
-
(可以加.crt 后缀)
-
命令:
-
生成证书
-
keytool -genkey -keystore 文件名(可包含路径) -keyalg rsa -alias 别名 -validity 有效期
-
查看证书
-
keytool -list -v -keystore 路径
-
把证书导出到文件
-
keytool -export -alias 别名 -keystore 证书名 -rfc -file 文件名(可包含路径)
-
修改密码
-
keytool -keypasswd -alias 别名 -keypass 旧密码 -new 新密码
-
导出证书到新的TrustStore
-
keytool -import -alias 别名 -file 文件名 -keystore truststore
-
-
-
-
第二节 安装
-
一、下载:
-
Openssl版本0.9.8i 地址:http:
-
ActivePerl版本5.8.8.822 [url]http:
-
5.8.8.822-MSWin32-x86-280952.msi
-
-
二、安装:
-
编译器VC6机器上一直有,不是这次特意安装的。貌似只要是c++编译器就差不多。
-
1.安装VC和ActivePerl,先后顺序无所谓,安装时注意勾选添加环境变量的选项。
-
2.检查VC6的环境变量,path需要包含C:\Program Files\Microsoft Visual Studio\VC98\bin,没有的话手动添加。测试是否有vc环境最
-
简单的测试方法是在执行install.bat前先在cmd下执行下cl,没有vc环境的话会报:“'cl' 不是内部或外部命令,也不是可运行的程序
-
”。
-
另外,还有一种办法:可以手工调用vc目录下设置环境变量的批处理vcvars32.bat,在VC的安装目录下可以搜索到这个文件。因为不同版本的vc这个文件所在位置不同所以我就不说明它的位置了。
-
-
-
3.解压Openssl,解压后会发现openssl-0.9.8i 目录下面有很多文件,更改文件夹名称为openssl,并剪切到c:\openssl其中的一个文件是INSTALL.W32用记事本或者其他文本编辑器 打开,这个文件是介绍Win32平台的安装方法,我下面的批处理也是根据这个文件写的,大家最好依据这文件的描述安装,英文不好的,可以对照我的批处理来 看,如果大家安装的版本和我相同,
-
那么直接使用下面的批处理安装即可。在INSTALL.W32相同目录下新建一个批处理install.bat,内容如下
-
-
-
@rem --prefix 指定安装目录
-
perl Configure VC-WIN32 --prefix=C:/openssl
-
pause
-
call ms\do_ms
-
pause
-
nmake -f ms\ntdll.mak
-
pause
-
nmake -f ms\ntdll.mak test
-
pause
-
nmake -f ms\ntdll.mak install
-
pause
-
进入到c:\openssl目录,执行批处理install.bat就可以了
-
-
-
三、注意事项:
-
-
-
1.安装时间比较长,请耐心等待
-
2.每个步骤间使用了pause暂停,便于观察。每步完成后按任意键继续,注意有没有报错。
-
3. 可以手工调用vc目录下设置环境变量的批处理vcvars32.bat,在VC的安装目录下可以搜索到这个文件。因为不同版本的vc这个文件所在位置不同 所以我就不说明它的位置了。测试是否有vc环境最简单的测试方法是在执行install.bat前先在cmd下执行下cl,没有vc环境的话会报'cl' 不是内部或外部命令,也不是可运行的程序
-
4.提示%OSVERSION% is not defined 这个错误的时候可以忽略它没关系
-
5.网上搜索到安装前修改OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,否则cl编译器会报.\crypto\des\enc_read.c文件的read是The POSIX name for this item is deprecated 建议使用_read。因为我使用非常简单的功能所以我没有修改它,需要的朋友可以尝试修改它。
-
6.最终编译结束会在指定安装目录下产生子目录和文件夹:
-
Makefile.bak
-
MINFO
-
inc32
-
out32dll
-
tmp32dll
-
bin
-
-
-
7.环境变量path中加入“C:\openssl\bin”,编辑"C:\openssl\openssl.cnf"文 件,修改CA_default节中的policy = policy_match为policy = policy_anything并把它拷贝到 C:\openssl\ssl。运行cmd,在任意目录下运行openssl,不出错误提示为准。注意:openssl.cnf 显示时,是一个快捷方 式
-
-
-
-
-
四、使用OpenSSL 配置Tomcat 6.x
-
-
先建立工作目录
-
mkdir root
-
-
1.生成CA证书目前不使用第三方权威机构的CA来认证,自己充当CA的角色
-
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out root/root-key.pem 1024
-
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out root/root-req.csr -key root/root-key.pem
-
3.自签署证书 :C:\OpenSSL\apps>openssl
-
x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey root/root-key.pem -days 3650
-
4.将证书导出成浏览器支持的.p12格式 :C:\OpenSSL\apps>openssl
-
pkcs12 -export -clcerts -in root/root-cert.pem -inkey root/root-key.pem -out root/root.p12
-
-
2.生成server证书
-
-
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out server/server-key.pem 1024
-
2.创建证书请求 :C:\OpenSSL\apps>openssl
-
req -new -out server/server-req.csr -key server/server-key.pem
-
3.自签署证书 :C:\OpenSSL\apps>openssl
-
x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey
-
server/server-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
-
4.将证书导出成浏览器支持的.p12格式 :C:\OpenSSL\apps>openssl
-
pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12
-
-
3.生成client证书
-
-
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out client/client-key.pem 1024
-
2.创建证书请求 :C:\OpenSSL\apps>openssl
-
req -new -out client/client-req.csr -key client/client-key.pem
-
3.自签署证书 :C:\OpenSSL\apps>
-
openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
-
4. 将证书导出成浏览器支持的.p12格式 :C:\OpenSSL \apps>openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12
-
-
4.根据root证书生成jks文件
-
C:\OpenSSL\apps\root>keytool -import -v -trustcacerts -storepass password -alias root -file root-cert.pem -keystore root.jks
-
-
5.配置tomcat ssl,修改conf/server.xmltomcat6中多了SSLEnabled="true"属性
-
keystorefile, truststorefile设置为你正确的相关路径
-
-
-
-
xml 代码
-
-
<Connector port="8080" minSpareThreads="5" maxSpareThreads="75"
-
enableLookups="true" disableUploadTimeout="true"
-
acceptCount="100" maxThreads="200"
-
scheme="https" secure="true" SSLEnabled="true"
-
-
clientAuth="true" sslProtocol="TLS"
-
keystoreFile="server.p12"
-
keystoreType="PKCS12" keystorePass="huawei"
-
truststoreFile="root.jks"
-
truststoreType="JKS" truststorePass="password"
-
/>
-
(注意原文的的配置文件字母的大小写没区分,导致添加HTTPS失败)
-
-
-
-
-
6.将root.p12,client.p12分别导入到IE中去(打开IE->;Internet选项->内容->证书)
-
root.p12导入至受信任的根证书颁发机构,client.p12导入至个人
-
-
7.访问你的应用http:
-
8.在jsp中取得符合x.509格式的证书
-
-
java 代码
-
%
-
-
X509Certificate[] ca=(X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate");
-
if(ca==null)
-
{
-
out.println("No cert info!");
-
} else {
-
String serial=ca[0].getSerialNumber().toString();
-
String DN=ca[0].getSubjectDN().toString();
-
}
-
%
-
-
WebServie调用前先设置JVM密钥属性:
-
-
System.setProperty("javax.net.ssl.trustStore", "D:\\Program Files\\tomcat6.0.26\\root.jks");
-
System.setProperty("javax.net.ssl.trustStorePassword", "password");
-
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
-
System.setProperty("javax.net.ssl.keyStore", "D:\\Program Files\\tomcat6.0.26\\server.p12");
-
System.setProperty("javax.net.ssl.keyStorePassword", "huawei");
- System.setProperty("javax.net.ssl.keyStoreType","PKCS12");
分享到:
相关推荐
NULL 博文链接:https://lj6684.iteye.com/blog/727688
linux、webservice、ssl、socket、搜索引擎nutch.rar
C#实现基于webService 的文件传输程序,WEB服务的创建和调用,并WSE3.0、后台线程的创建模式、文件哈希校验
基于webservice的文件传输。从理论角度详细说明了webservice传输文件的基本原理
webservice 实现文件的传输。
WCF自定义绑定与Webservice传输性能比较
电子书的概述:webservice文件传输 源代码的说明:包括客户端和服务器端的简单介绍 文档的片段:包括客户端和服务器端的讲解
java调用windows系统的com组件,用jacob来处理。JACOB一个Java-COM中间件.通过这个组件你可以在Java应用程序中调用COM组件和Win32程序库。
Wp7客户端与Webservice的数据传输,json的序列化与反序列化借鉴.pdf
Java以webservice方式调用SAP接口传输数据的pdf文档,仅供参考!
下载后会有2个文件一个 UpFile模拟上传客户端, WebServer模拟服务器接收端。 环境是VS2010.
PHP webservice传输附件和文章源码: 有家公司专门搞PHP的写此接口,搞了个把月最后文章能传输,附件传不过去,,交给我花了2天的时间搞定。.
NULL 博文链接:https://exceptioneye.iteye.com/blog/1325187
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
cxf与spring整合,以及webservice传输验证demo
java调用json参数的webservice 涉及技术: JAVA JSON WEBSERVICE
Delphi7下开发WebService如何使用数据库人操作介绍.
webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录webservice摘录质
上传图片和下载图片,使用的时候先要在你要上传的服务端用IIS发布webservice接口