文章只是笔者试验的一些笔记,前半部分的内容主要参考 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
相关推荐
这是我实战的笔记,全程直播。 #### Tomcat和Openssl构建HTTPS双向认证 ###### ...Linux下安装OpenSSL 一、创建服务器证书、客户端证书以及CA ...2、配置Tomcat支持HTTPS双向认证(服务器将认证客户端证书)
介绍了用Java和0penSsL构建一个小型cA系统的方法。
这是我自己关于学习openSSL的一些心德,很初级,请大家不要见笑
基于OpenSSL编写的安全聊天程序。...在Windows下,利用OpenSSL的安全套接字通信编程,实现一个点对点的聊天系统,采用客户端服务器双向认证,具有聊天记录本地加密存储功能,输入正确的口令可以查看。
菜鸟 搞了一周,测试能用 很多不懂,多指教
一:生成CA证书 二.生成server证书。 三.生成client证书。 四.根据ca证书生成jks文件 五.配置tomcat ssl 六.导入证书 七.验证ssl配置是否正确
压缩包里有客户端源码和服务器端源码,支持TCP的双向认证,也支持WEBSOCKET的双向认证,内附测试 wss的测试例子, 需要生成PKCS12的证书,导入浏览器才可以测试。
C语言实现https客户端,使用证书的双向认证,上传资料中,包含证书和代码,证书使用openssl生成的RSA证书,也可换成自己的证书和服务端一致就行了。
ssl tomcat opensslssl tomcat openssl
基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于...
使用Java实现根据ca购买到的根证书 批量生产客户端需要的.bks和.cer文件,从而实现双向认证
基于OpenSSL的安全密码平台的设计与实现 基于OpenSSL的安全密码平台的设计与实现 基于OpenSSL的安全密码平台的设计与实现 基于OpenSSL的安全密码平台的设计与实现
个人写的CA设计,课设专用,专业人士可忽略,适用于初学者
这是采用调用opessl生成的证书。方法封装在jar包。有些原有的
第二个是虽然课程也有接近双向认证的实现代码,但当时是Java+JCE环境现在要用C+++OpenSSL环境,总体意思确实还是差不多但具体函数和参数差别还是不少。 所以眼下有的是:证书生成的思想+双向认证实现的思想。对读者...
java实现SSL的双向认证.模拟场景: Server端和Client端通信,需要进行授权和身份的验证,即Client只能接受Server的消息,Server只能接受Client的消息。
涉及到社会的各个领域,特别是金融以及电子商务领域,成千上万的电子商务交易安全问题无处不在,用户信息泄露、个人信息被各大商家所获取以及国家、企业之间的利益博弈中无不存在其通信中的安全,其正真的较量就在于...
需要了解 ECC 加密的,可以参考一下,这个是基于openssl 的ECC 算法。解压后,test_ecc 里面是测试代码,大家看看,就明白了ECC算法的流程,里面有生成key,加密、解密。
基于OpenSSL的SM2软实现库及测试程序