`
fei78945678
  • 浏览: 14678 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

Webservice SSL数字证书_ 双向认证项目应用

阅读更多
第一节 基础知识
         最近要做一个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://ip:port/的方式来访问。当我们与一个网站建立https连接时,我们的浏览器与Web Server之间要经过一个握手的过程来完成身份鉴定与密钥交换(也称握手协议),从而建立安全连接  。

2.用到的软件包  
Tomcat 6.0.8  
用途:Web Server。  
JSSE   (jdk1.4以上版本包含有)
用途:用来产生Tocmcat使用的秘钥对(keystore)。  
Openssl 
用途:用来产生CA证书、签名并生成IE可导入的PKCS#12格式私钥。  
下载:http://www.openssl.org/  

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://www.openssl.org/source/openssl-0.9.8i.tar.gz[url]
ActivePerl版本5.8.8.822 [url]http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-
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://ip:8443,如果配置正确的话会出现请求你数字证书的对话框 
8.在jsp中取得符合x.509格式的证书

java 代码
%       
        //获得certificate chain      
         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");

分享到:
评论
1 楼 hugang357 2011-06-20  
thanks~

相关推荐

    wsdl.rar_WEBservice-Sqlserver_java webservice_webservice sgip_w

    【标签】"webservice-sqlserver java_webservice webservice__sgip wsdl_webservice_ wsdl.rar"进一步揭示了技术栈。"sqlserver"表明数据库管理是通过SQL Server完成的,这通常涉及到使用JDBC(Java Database ...

    xfire-HelloWorld.rar_webservice_webservice FPGA _xfire hellowor

    标题中的“xfire-HelloWorld.rar_webservice_webservice FPGA_xfire hellowor”提到了几个关键元素:xfire、webservice、FPGA以及一个简单的示例应用“HelloWorld”。这表明我们将探讨的是如何使用xfire这个框架来...

    web service.zip_labview webservice_labview web_labview webservi

    在这个“web service.zip_labview webservice_labview web_labview webservi”的压缩包中,我们可能找到的是关于如何在LabVIEW中使用Web服务的范例和教程。 LabVIEW中的Web服务支持主要分为两种类型:SOAP(Simple ...

    WebService_CXF_x509

    【WebService_CXF_x509】是一个关于使用Apache CXF框架实现基于X.509数字证书的安全Web服务的主题。Apache CXF是一个流行的开源Java框架,用于构建和部署Web服务。X.509是一种标准格式,用于表示公钥基础设施(PKI)...

    基于HTML5_Ajax和WebService的WebGIS研究_徐卓揆

    基于HTML5_Ajax和WebService的WebGIS研究_徐卓揆 论文

    SayHelloClient2.rar_SayHello webservice_java webservice_service

    描述中提到的“webservice客户端源代码”进一步确认了这个项目是关于如何与Web服务进行交互的。标签中的“java_webservice”和“service_webservice”强调了这是基于Java的Web服务实现,而“web_service_”和...

    TomcatWebService双向认证

    下面将详细阐述实现双向认证的各个步骤、配置方法以及证书管理。 1. **Tomcat的配置** Tomcat作为HTTP服务器和Java应用容器,能够处理HTTP请求并返回响应。要启用HTTPS,需在Tomcat的`server.xml`文件中配置SSL...

    webserver.zip_C++ webservice_visual c_webserver

    标题 "webserver.zip_C++ webservice_visual c_webserver" 暗示了这是一个关于使用C++编程语言,借助Visual C++开发环境构建Web服务的项目。描述中的“实现webservice窗口管理的内容”进一步指出,这个项目可能包含...

    webservice_symbolbdm_webservice_

    【标题】"webservice_symbolbdm_webservice_" 涉及到的是一个使用Java语言实现的Web服务(WebService)项目,其主要目的是实现客户端与服务器之间的通信。在Web服务的世界里,这种通信机制允许不同系统间的数据交换...

    Java-webservice接口测试工具Storm_r1.1-Adarna

    在实际应用中,Storm_r1.1-Adarna可以帮助开发团队快速定位和修复Web服务接口的问题,提高开发效率,减少集成阶段的错误,从而提升整体项目的质量。 总结来说,Java WebService接口测试工具Storm_r1.1-Adarna是Java...

    调用https协议的webservice,以及证书手动加载

    1. **创建安全套接字层(SSL)连接**:客户端(我们的应用程序)向服务器发起连接请求,服务器回应它的数字证书,包含公钥和服务器身份信息。 2. **证书验证**:客户端检查服务器证书的有效性,包括证书是否由可信任...

    biee二次开发(WebService)_oracle_BIEE_

    在"biee二次开发(WebService).doc"文档中,读者将找到更具体的步骤、示例代码和最佳实践,以帮助他们在实际项目中成功实施Oracle BIEE的WebService二次开发。通过充分利用这些资源,开发者可以打造出更加灵活、定制...

    SANGFOR_SSL_v6.8_2015年度渠道高级认证培训02_用户认证进阶培训.ppt

    本培训内容涵盖多个主题,如第三方服务器认证、组映射和角色映射、LDAP导入用户以及使用WebService进行短信认证等,确保用户能够有效地管理和控制SSL VPN的访问权限。 ### 第三方服务器认证 SANGFOR SSL VPN支持两...

    WebService_ksoap2_jar

    在Android应用开发中,与远程服务进行交互是一个常见的需求,比如获取服务器上的数据或执行特定操作。WebService是一种标准的、平台无关的通信协议,用于不同系统间的交互。本篇文章将详细探讨如何在Android中利用...

    webService入门教程_java_webservice_

    【标题】:WebService入门教程 - Java WebService 【描述】:本教程旨在引导初学者了解如何使用Eclipse集成开发环境来发布基于Java语言的WebServices服务。WebServices是一种允许不同系统之间进行交互和数据交换的...

    CloseService_v5_cs_fedex_webservice_advanced_close_sleptmom_源码

    【标题】"CloseService_v5_cs_fedex_webservice_advanced_close_sleptmom_源码" 是一个关于FedEx(联邦快递)高级Web服务接口的C#(CSharp)源代码实现,主要用于处理包裹的关闭服务。这个项目可能涉及到物流管理、...

    金蝶EAS_V7.5_WebService开发指南_EASwebservice开发_金蝶开发_

    4. **配置安全认证**:金蝶EAS的Web Service可能需要进行用户身份验证,开发者需要配置相应的安全策略,如基本认证、数字证书等,确保数据传输的安全性。 5. **编写代码调用服务**:使用生成的客户端代理类,编写...

    WebService_資料

    WebService_資料WebService_資料WebService_資料WebService_資料WebService_資料WebService_資料WebService_資料WebService_資料WebService_資料WebService_資料WebService_資料WebService_資料WebService_資料

Global site tag (gtag.js) - Google Analytics