`

基于openssl、tomcat 7、Axis2的双向CA认证方案以及Java客户端调用

阅读更多
文章只是笔者试验的一些笔记,前半部分的内容主要参考 http://kyfxbl.iteye.com/blog/1910891 博客,然而文章还包括与tomcat的集成与Axis2的集成,另外还包括Java作为客户端如何调用?遇到的种种问题,但内容现在还没有这么全,由于时间原因,日后补充!
文章待整理。。。。。。!
 
目录准备:
1、mkdir private
2、mkdir certificates
 
一、签发CA根证书和私钥
 
1、创建CA秘钥
openssl genrsa -aes256 -out private/ca.key.pem 2048
秘钥密码:a1234567
 
2、创建CA签名请求文件
openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=KH/ST=PHNOM PENH/L=PHNOM PENH/O=supernet/OU=supernet/CN=*.supernet.com.kh"
提示输入秘钥的密码
 
提交一些组织信息DN,CN比较重要,因为里面含有域名信息,访问时必须是匹配的才能访问
 
3、签发CA根证书
openssl x509 -req -days 3650 -sha256 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certificates/ca.cer
 
4、把根证书从PEM编码转为PKCS编码 
openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certificates/ca.cer -out certificates/ca.p12 
 

<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->

有些浏览器不支持PEM格式编码的证书,JAVA也不支持,因此转换成PKCS的p12文件。
 
二、签发服务器端证书
 
1、创建服务器端私钥
openssl genrsa -aes256 -out private/server.key.pem 2048 
私钥密码:a1234567
 
2、创建服务器端证书签发请求
openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=KH/ST=PHNOM PENH/L=PHNOM PENH/O=supernet/OU=supernet/CN=boss.supernet.com.kh"
 
CN现在是一个具体的网站
 
3、利用CA根证书,签发服务端证书 
openssl x509 -req -days 3650 -sha256 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certificates/server.cer 
 
4、转换成p12的格式
openssl pkcs12 -export -cacerts -inkey private/server.key.pem -in certificates/server.cer -out certificates/server.p12 
 
 
以上两步骤已经可以完成SSL单向验证了。可以配置tomcat下得conf/server.xml,
当通过浏览器访问时需要注意:
1、配置Hosts域名,否则浏览器会给与警告
2、此时还是报警告,提示证书不被信息的机构所颁发,导入CA根证书,ca.cer,然而导入之后还是警告,在mac下chrome还需要设置证书的信任机制,加密套接字协议层(SSL): 始终信任,设置以后在访问,就不会看到错误图标
 
<Connector  SSLEnabled="true"   acceptCount="100"
disableUploadTimeout="true"   enableLookups="false"
maxThreads="25" port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
scheme=“https" secure="true" sslProtocol="TLS"keystoreFile="/Users/killer/Downloads/SignedCerts/v9/certificates/server.p12"
keystorePass="a1234567"
keystoreType="PKCS12"
 
// false为单向,true为双向
clientAuth="false"

truststoreFile="/Users/killer/Downloads/SignedCerts/v8/server.keystore"  
truststorePass="a1234567"
truststoreType="JKS"
>
</Connector>
 
三、签发客户端证书
 
1、生成客户端证书私钥
openssl genrsa -aes256 -out private/client.key.pem 2048
 
2、创建客户端证书签发申请
openssl req -new -key private/client.key.pem -out private/client.csr -subj "/C=KH/ST=PHNOM PENH/L=PHNOM PENH/O=supernet/OU=supernet/CN=supernet boss user"
 
3、利用CA根证书,签发客户端证书 
openssl x509 -req -days 3650 -sha256 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/client.csr -out certificates/client.cer 
 
4、把客户端证书转换成p12格式
openssl pkcs12 -export -clcerts -inkey private/client.key.pem -in certificates/client.cer -out certificates/client.p12 
 
 
证书生成成功,接下来可以配置双向验证,配置tomcat ssl,conf/server.xml,配置如下,这里使用根证书充当服务器验证客户端发送过来的客户端证书
clientAuth="true"
truststoreFile="/Users/killer/Downloads/SignedCerts/v9/certificates/ca.p12"
truststorePass="a1234567"
truststoreType="PKCS12"
注意:这里只有老版本的chrome会提示SSL 错误,“无法与服务器建立安全连接,可能是服务器出现了问题,也可能是您没有服务器要求的客户端证书”
其它浏览器版本都是,“安全连接失败,连接被中断”。
 
接下来客户端浏览器安装client.p12文件,因为都是同一个根证书所签发的证书,因此只要安装client.p12就能通过校验。导入至个人证书,firefox下是“您的证书”,会自动选择到PKCS12文件类型,输入密码 a1234567
这里客户端证书切记要导入正确,否则不能生效的。正常情况会弹出一个选择证书的界面,如下,各个浏览器不一致:


 
五、SSL总结
 
1、证书一定严格按照步骤来生成,否则会出现各种问题,根证书相当于一个机构,当客户端浏览器安装了这个机构的根证书之后,以后用这个根证书生成的所有证书,都会被信任,这里服务端,通过自签的CA根证书生成,客户端可以安装根证书,也可以安装服务端证书,安装服务器证书的不便之处在意,以后有多级域名之后,客户端还需要安装其它服务器端证书,但如果是安装了根证书,其它服务器只需要根据根证书来签发一个新的证书,而客户端不用变。
 
2、单向验证,只需要客户端安装一个信任的机构,这里是一个根证书,服务器配置(tomcat)根证书签发的证书,就可以实现单向验证了,客户端没有安装根证书之前,能访问系统,但会提醒https警告,需要点击继续访问。安装了之后,就是一个绿色的锁。
每次访问系统时,服务器Tomcat会发送服务器证书至客户端进行验证,客户端浏览器根据接收到得证书去查找本地安装的证书机构,最终会找到了之前安装的根证书,然后进行验证通过,给予安全的标示。


 
客户端浏览器安装根证书ca.cer + Tomcat配置服务器证书(server.p12/a1234567)
 
3、双向验证,除了单向验证的流程之外,客户端还需要发送客户端证书给予服务器进行验证,客户端的证书也是通过CA根证书签发的,服务器TOmcat需要配置为客户端验证clientAuth = true,其次配置信任的证书,这里配置的是根证书ca.p12,因为根证书能直接验证其所签发的客户端证书,所有的客户端都安装客户端证书就能通过验证,客户端应该是安装p12文件个人证书,不能安装cer。
 
客户端浏览器安装客户端证书client.p12 + Tomcat配置信任证书ca.p12/a1234567
并开启clientAuth = true
 
 
 
六、其它
 
1、应用部分请求强制使用ssl访问
<!--  强制SSL配置 --> 
<security-constraint>
  <web-resource-collection>
  <web-resource-name>SSL</web-resource-name>
  <url-pattern>/welcome.jsp</url-pattern><!-- 使用SSL -->
  </web-resource-collection>
     <user-data-constraint>
      <description>force SSL</description>
       <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
</security-constraint>
 
2、将CA证书生成JKS
keytool -keystore ca.jks -keypass a1234567 -storepass a1234567 -alias ca -import -trustcacerts -file ca.cer
 
3、添加信任的证书
keytool -keystore ca.jks -keypass a1234567 -storepass a1234567 -alias xxxxx -import -trustcacerts -file xxxxx.crt
 
查看列表:keytool -list -keystore ca.jks
 
参考资料:
http://openssl.org/docs/
http://kyfxbl.iteye.com/blog/1910891
http://my.oschina.net/dongchao/blog/403447?utm_source=tuicool
http://stackoverflow.com/questions/13848724/axis2-https-is-forbidden
http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html
 
  • 大小: 131.3 KB
  • 大小: 123.6 KB
分享到:
评论

相关推荐

    用tomcat和openSSL构建https双向认证

    这是我实战的笔记,全程直播。 #### Tomcat和Openssl构建HTTPS双向认证 ###### ...Linux下安装OpenSSL 一、创建服务器证书、客户端证书以及CA ...2、配置Tomcat支持HTTPS双向认证(服务器将认证客户端证书)

    使用 OpenSSL 创建生成CA 证书服务器客户端证书及密钥

    本文将详细介绍如何使用 OpenSSL 创建和管理CA证书、服务器证书和客户端证书,以实现SSL单向认证和双向认证。 首先,我们来看一下如何生成 CA(证书颁发机构)证书。CA证书是信任的根,用于签署其他证书,确保网络...

    通过tomcat实现SSL双向认证

    通过 Tomcat 实现 SSL 双向认证 Tomcat 是一个流行的开源 Web 服务器,它支持 SSL/TLS 加密协议来确保数据传输的安全性。SSL 双向认证是一种高级的身份验证机制,它需要同时配置 Web 服务器证书和客户端证书,并在...

    tomcat7+openssl

    根据提供的标题、描述以及部分内容,可以总结出与“tomcat7+openssl”相关的知识点主要集中在以下几个方面:证书的生成、私钥与公钥的管理、使用openssl工具进行证书请求及签发、以及如何将生成的证书导入到Java环境...

    java调用openssl生成证书

    在这个过程中,我们通常会使用OpenSSL命令行工具,然后通过Java程序来调用这些系统命令。下面将详细讲解这个过程以及涉及的相关知识点。 首先,OpenSSL是一个强大的安全套接层(SSL)和传输层安全(TLS)协议实现...

    tomcat 实现https 双向认证通信

    本文主要介绍如何在Linux平台上,使用Apache Tomcat、OpenSSL以及Java Keytool来实现HTTPS通信,并进一步完成双向认证的功能。文章假设读者具备基本的Linux操作技能以及对Tomcat有一定的了解。 #### 环境配置 - **...

    基于JAVA的CA认证中心实现

    介绍了用Java和0penSsL构建一个小型cA系统的方法。

    JAVA实现的SSL/TLS双向认证源代码

    本篇将深入探讨如何使用Java实现SSL/TLS双向认证,以及涉及到的相关工具和步骤。 首先,让我们理解什么是SSL/TLS双向认证。通常,SSL/TLS连接采用单向认证,即服务器验证客户端的身份,而客户端不需要验证服务器。...

    基于OpenSSL的PKI环境设计(CA模块)

    **基于OpenSSL的PKI环境设计(CA模块)** PKI(Public Key Infrastructure,公钥基础设施)是一种用于安全网络通信的技术,它通过公钥和私钥的加密方式确保数据的机密性和完整性。OpenSSL是一个强大的安全套接字层...

    C语言https客户端双向认证

    首先,双向认证(Mutual Authentication)是网络安全的一种机制,它要求客户端和服务端都必须提供有效的身份证明才能进行通信。在HTTPS的双向认证中,不仅服务器需要向客户端展示其证书以证明身份,客户端也需要向...

    基于Tomcat搭建SSL双向认证示例【100012422】

    本示例将深入探讨如何使用Tomcat搭建SSL(Secure Socket Layer)双向认证环境,以及通过Java原生类库SSLSocket进行编程,以及使用Apache的Httpclient库模拟安全的客户端请求。以下是对这些知识点的详细讲解。 首先...

    axis2c linux下c客户端编程详解

    内容涵盖axis2c的安装过程、根据WSDL文件生成客户端代码的方法,以及客户端的具体开发流程。此外,文章还会提供详细的客户端实例代码及步骤,帮助开发者快速上手。 #### 二、axis2c引擎的安装与配置 ##### 2.1 ...

    openSSL制作证书并在tomcat上配置

    2. 生成CA自签名证书:`openssl req -new -x509 -key ca.key -out ca.crt` CA签名证书文件 使用生成的CA证书签名服务器端和客户端的证书文件。下面是签名证书文件的步骤: 1. 使用CA证书签名服务器端证书文件:`ca...

    SSL双向认证java实现

    SSL 双向认证 Java 实现 SSL 双向认证是指在客户端和服务器端之间的通信过程中,双方都需要对对方进行身份验证和授权,以确保通信的安全性。Java 语言提供了 JSSE(Java Security Socket Extension)来实现 SSL ...

    openSSL生成证书以及在tomcat下的配置

    "openSSL生成证书以及在tomcat下的配置" openSSL是目前最流行的开源加密库之一,它提供了安全的数据传输和认证机制。在Web应用程序中,openSSL广泛应用于生成数字证书和私钥,从而确保数据的安全传输。今天,我们将...

    Tomcat6配置使用SSL双向认证

    在IT领域,特别是Web服务器管理与安全配置方面,Tomcat6的SSL(Secure Sockets Layer)双向认证配置是一项关键技能。SSL双向认证不仅能够保护数据传输的安全性,还能确保通信双方的身份验证,这对于金融、医疗等对...

    Tomcat6和5.5配置使用SSL双向认证(使用openssl生成密钥).rar

    在这个场景中,我们将探讨如何在Tomcat 6和5.5版本中配置SSL双向认证,并使用openssl工具生成必要的密钥文件。 **一、生成CA证书** 创建一个自签名的根证书颁发机构(Root CA)是SSL双向认证的第一步。这可以通过...

    基于OpenSSL的安全聊天程序

    基于OpenSSL编写的安全聊天程序。...在Windows下,利用OpenSSL的安全套接字通信编程,实现一个点对点的聊天系统,采用客户端服务器双向认证,具有聊天记录本地加密存储功能,输入正确的口令可以查看。

    基于OpenSSL的安全通信系统的设计与实现

    【基于OpenSSL的安全通信系统的设计与实现】 在21世纪的信息化时代,互联网通信已经渗透到社会的方方面面,尤其在金融和电子商务领域扮演着至关重要的角色。然而,随着网络通信的普及,网络安全问题日益凸显,如...

Global site tag (gtag.js) - Google Analytics