- 浏览: 1064789 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
flyfeifei66:
list<bean> bean 中有 list&l ...
freemarker中的list -
BelloVersion:
第五种错误Remote host closed connect ...
客户端如何使用httpclient向https服务器发送数据 -
willxue:
看了半天 前面说的是错的?。。。
反向键索引的原理和用途 -
liulanghan110:
quainter 写道麻烦博主,参数为数组时,paramete ...
MYBATIS 的parameter -
quainter:
麻烦博主,参数为数组时,parameterType怎么写啊?
MYBATIS 的parameter
作者:junsan
QQ:334620162
发布网址:http://www.javastar.org/?p=120
这周一个项目上线,使用了SSL双向验证的方式保护WebService接口,原本自己使用keytool签发的服务器和客户端证书在开发和测试的时候都是正常的,但是,在上线后,通过公司的CA平台签发出来的正式证书,却始终无法通过java客户端正常链接。
后来通过网上的一个InstallCert.java的文件生成本地可信任证书库,倒是可以连接了,但是总觉得不对劲,后来仔细检查了一下,原来自己的操作步骤中漏了一步。
为了备忘,也防止自己以后再犯类似的错误,记录下来以备参考,同时也提供给需要的朋友,省的走弯路。
本文使用java的jdk自带的keytool为例说明。
第一部分,先说证书的申请。
这步是要到正规的CA公司申请正式的设备证书必须走的步骤。
1、先生成证书的密钥对
打开命令行,切换到某个自己新建的目录下,执行如下命令
keytool -genkey -keyalg RSA -keysize 1024 -dname “CN=www.javastar.org,OU=翊天阁,O=翊天阁,L=南京市,ST=江苏省,C=CN” -alias server -keypass 123456 -keystore server.jks -storepass 123456 -validity 365
这里说明一下几个重要的地方,CN=www.javastar.org,这里的www.javastar.org 一定要换成你实际要部署的站点的域名,如果是在内网,就要用服务器的hostname,一定不可以用IP,否则,是无法建立SSL链接的。
OU=翊天阁,O=翊天阁,这里可以替换成你自己的组织名称,或者公司名称。
-validity 365这里声明证书有效期为1年。
其他的参数自己可以参考keytool的使用帮助或相关文档。
好了,成功执行上面的命令后,我们在当前命令行所在目录得到server.jks文件,这个就是包含密钥对的基本证书信息库文件。
2、导出证书请求文件
keytool -certreq -alias server -sigalg “SHA1withRSA” -file server.pem -keypass 123456 -keystore server.jks -storepass 123456
这里可以得到一个server.pem的文件。
3、向CA公司申请签发设备证书
将上一步得到的server.pem证书发送给相关的CA公司,CA公司会通过这个申请签发一张设备证书,最后我们会得到一个.cer的文件,比如server.cer。
同时,我们要取得该CA公司的证书链,比如会有CA_ROOT.cer和CA_CA.cer,第一张为CA公司的根证书,第二张为CA公司的签名证书。
4、将CA根证书导入服务器证书库
keytool -import -alias CA_ROOT -keystore server.jks -trustcacerts -storepass 123456 -file CA_ROOT.cer
5、将CA签名证书导入服务器证书库
keytool -import -alias CA_CA -keystore server.jks -trustcacerts -storepass 123456 -file CA_CA.cer
6、使用CA签发的证书回复我们自己生成的包含私钥的证书
keytool -import -alias server -keystore server.jks -trustcacerts -storepass 123456 -file server.cer
7、导出回复成功后的服务器证书
keytool -export -alias server -storepass 123456 -file javastar.org.cer -keystore server.jks
好了,到这里我们需要的设备证书已经ok了。
最后对我们实际有用的是两个文件:server.jks,是服务器证书库,存储了含有私钥的服务器证书,及其证书链,这个就是主要的设备证书了,是 放在服务器的SSL配置里面;还有一个是javastar.org.cer,这个是只包含服务器证书公钥的设备证书,是发给用户,让用户放入自己的可信任 库的。
第二部分,配置Tomcat的SSL双向链接
1、准备客户端证书
keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore client.p12 -dname “CN=Client,OU=javastar.org,L=nj,ST=js,C=cn” -storepass 123456 -keypass 123456 -validity 365
执行完毕,我们会得到一张p12的客户证书client.p12。
2、导出.cer格式的客户证书
keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass 123456 -rfc -file client.cer
执行完毕得到client.cer证书。
3、将客户端证书导入服务器的可信任证书库
keytool -import -v -file client.cer -keystore servertrust.keystore -storepass 123456
执行完毕得到servertrust.keystore,这个是给tomcat服务器端用的。
4、将服务器证书导入客户端可信任证书库
keytool -import -v -file javastar.org.cer -keystore clienttrust.keystore -storepass 123456
执行完毕会得到clienttrust.keystore证书库,留着备用。同时,也可以同样的方法,把CA_ROOT.cer和CA_CA.cer导入。
5、在和tomcat的bin目录并行的目录下新建一个cert文件夹,把server.jks和servertrust.keystore文件拷贝进去。
6、找到tomcat的server.xml文件,找到如下的内容
<!–
<Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”
maxThreads=”150″ scheme=”https” secure=”true”
clientAuth=”false” sslProtocol=”TLS” />
–>
去掉注释,并修改为
<Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”
maxThreads=”500″ scheme=”https” secure=”true”
clientAuth=”true” sslProtocol=”TLS”
keystoreFile=”D:/apache-tomcat-6.0.20/cert/server.jks” keystorePass=”123456″
truststoreFile=”D:/apache-tomcat-6.0.20/cert/servertrust.keystore” truststorePass=”123456″/>
这里注意把D:/apache-tomcat-6.0.20/cert修改为你的tomcat实际的路径。
7、启动或者重启tomcat,在浏览器中导入client.p12的证书,然后,在地址栏输入https://www.javastar.org:8443
,就会弹出证书选择框,选择证书后,就可以使用SSL协议访问tomcat服务器了。
第三部分,在程序中如何建立与服务器的SSL双向认证链接
其实这个就简单了,以java为例,比如我们现在要访问一个通过SSL双向认证保护的WebService接口,只需要在生成的客户端程序中开始部分加入
System.setProperty(“javax.net.ssl.keyStore”, “D:/client.p12″);
System.setProperty(“javax.net.ssl.keyStorePassword”, “123456″);
System.setProperty(“javax.net.ssl.keyStoreType”, “PKCS12″);
System.setProperty(“javax.net.ssl.trustStore”, “D:/clienttrust.keystore”);
System.setProperty(“javax.net.ssl.trustStorePassword”, “123456″);
System.setProperty(“javax.net.ssl.trustStoreType”, “JKS”);
JVM会自动将证书提交给服务器验证,由于服务器证书也在我们的可信任库,也会自动信任服务器端的证书。
下面的代码可以在需要的时候清除以上的环境内容
System.clearProperty(“javax.net.ssl.keyStore”);
System.clearProperty(“javax.net.ssl.keyStorePassword”);
System.clearProperty(“javax.net.ssl.keyStoreType”);
System.clearProperty(“javax.net.ssl.trustStore”);
System.clearProperty(“javax.net.ssl.trustStorePassword”);
System.clearProperty(“javax.net.ssl.trustStoreType”);
有一点要提醒的就是,客户端连接的时候,需要把连接的url修改为https的,如以JAX-WS的客户端为例
URL url = new URL(“https://www.javastar.org:8443/WsPort.ws?wsdl”);//
这里就是实际发布的wsdl的地址
WsService hws = new WsService(url);//自动生成的类可能没有这个方法,你需要仿照写一个
Ws ws = hws.getUsvsPort();
自建的构造方法:
public WsService(URL wsdlLocation) {
super(wsdlLocation, new QName(“http://webservice.javastar.org/
“,
”WsService”));
}
得到了对象的实例,其他的就跟我们普通操作java类一样了。
如果发现问题可以和我交流,QQ334620162,欢迎转载,请保留版权信息。
发表评论
-
JAVA内存分析
2017-09-30 18:42 440jmap -heap pid : 查看堆的使用状况信息 ... -
java dump线程日志
2016-02-15 10:52 1471JVM 自带的工具获取线程堆栈: JDK自带命令行工具获取 ... -
spring 拦截器
2015-05-05 16:07 8341.拦截器配置 <mvc:intercepto ... -
用 ThreadLocal 管理用户session
2014-11-10 15:47 9191很多项目中需要在代码中使用当前登录用户的信息,但是又不方便把 ... -
JAVA并发控制的几种办法
2014-08-25 16:43 2743假如有十张票,现在 ... -
synchronized
2014-08-21 16:58 1250synchronized 关键字的作 ... -
非阻塞同步机制与CAS操作
2014-07-29 16:07 1393锁的劣势 Java ... -
线程简介(转)
2014-04-21 12:06 769一、线程概述 线程是 ... -
什么是线程,如何创建线程
2014-04-21 12:03 920如果你学习过操作系统 ... -
线程池有助于实现最佳资源利用率
2014-04-21 10:01 1422为什么要用线程池? 诸如 Web 服务器、数据库服务器、 ... -
spring实现初始化和销毁bean之前进行的操作
2014-03-03 19:01 972第一种:通过@PostConstruct 和 @PreDes ... -
文章自动添加超链接
2014-01-14 16:01 2178在网上可以发现,很多文章中的关键词会有超链接,超链接的实现 ... -
JVM 内存监控
2013-11-28 14:17 1039jps Java进程查看工具,实际上它和Unix/Lin ... -
freemarker操作字符串,数字,布尔类型函数
2013-11-26 16:45 6606布尔类型 1. 后台不能将值设置为Boolean对 ... -
汉字转拼音
2013-11-26 16:39 1194import net.sourceforge.pinyin4 ... -
birt读取现有系统的数据库配置作为数据源
2013-09-10 13:51 3801Birt的数据源可以用多种形式,当我们把BIRT嵌入到现有 ... -
birt动态SQL
2013-07-26 18:05 9058birt动态SQL实现有三种方式:拼接SQL、绑定变量和让 ... -
关于spring事务
2013-06-13 14:44 985在ORACLE数据库中,一般DDL语句是隐式COMMIT提交 ... -
Tomcat Server是如何处理http请求的
2013-05-08 10:24 1293假设来自客户的请求为:http://localhost:8 ... -
注解annotation
2013-05-07 14:40 1094ava注解是附加在代码中的一些元信息,用于一些工具在编译、运 ...
相关推荐
这是我实战的笔记,全程直播。 #### Tomcat和Openssl构建HTTPS双向认证 ###### 选择HTTPS WEB服务器 Linux下安装OpenSSL 一、创建服务器证书、客户端...2、配置Tomcat支持HTTPS双向认证(服务器将认证客户端证书)
win2008搭建CA服务器tomcat5的ssl配置
本问讲述了自己使用OpenSSL keytool等工具自己生成CA证书的详细步骤及使用这些证书的Tomcat服务端设置及客户端IE导入。
自己搭建的CA证书服务器,进行安全认证与颁发数字证书。
CA证书服务器的建立与使用 一、实验题目 : CA证书服务器的建立与使用 二、实验目的 本课程设计的目的是,使学生掌握CA认证的知识,并能够使用证书完成用户身份的认证和通信过程中的安全保密。 三、实验要求 与...
ssl服务器证书(包含ca证书和服务器证书客户端证书)
一:生成CA证书 二.生成server证书。 三.生成client证书。 四.根据ca证书生成jks文件 五.配置tomcat ssl 六.导入证书 七.验证ssl配置是否正确
3. 使用新安装的国密浏览器访问 https://127.0.0.1 地址,浏览器通过GMSSL_ECC_WITH_SM4_CBC_SM3国密密码套件与TOMCAT服务器建立国密SSL规范的单向加密通道,并打开指定网页 以上步骤经过实际测试 感谢大宝CA...
调用一个需要双向认证接口碰到的问题,现分享给大家 文章主要描述怎么样生成机构颁发的证书根据证书生成jks文件 另外有意义的参考文章如下,主要为java程序带证书调用接口 ...
Windows server 2019搭建证书服务器_windows证书服务器申请证书步骤-CSDN博客.mhtml
ssl自制全套证书(包含服务器端、客户端、ca端的证书,格式有.crt,.key,.truststore,.keystore,.p12,.cer,.pem等类型),当时要配置webservice接口、tomca、nginx通过ssl访问的证书,弄了好久才生成了一套能使用的。...
教你怎么样做到 CA服务器和WEB服务器分离-实现SSL
搭建一个私有CA,使用到不同组件中,并进行测试。...如果tomcat服务比较多,那么每一个都需要像上面一样来回添加证书,比较繁琐,这个时候,使用CA机构进行认证时比较方便的。这也时,私有CA搭建以及使用的过程。
本人收集的教你如何使用命令行在Tomcat中安装CA证书
生成申请证书请求获取及安装中级CA证书安装服务器证书及配置绑定一、生成证书请求 进入IIS控制台 在“开始”菜单上,依次单击“所有程序”、“附件”和“运行”。 在“打开”框中,键入 inetmgr,然后单击“确定”。...
一:生成CA证书 二.生成server证书。 三.生成client证书。 四.根据ca证书生成jks文件 五.配置tomcat ssl 六.导入证书 七.验证ssl配置是否正确
搭建CA服务器SSL实现网站数据加密传输
图文并茂,详细讲述如何在Windows server 2003系统上安装配置CA服务器安装和配置,适用于安全机制的配置。
基于Red-Hat-Enterprise-Linux-5-update-2-搭建SSL安全网站认证服务器CA以及SSL安全网站实验笔记全工具有疑
Java环境中配置SSL双向认证。在Java环境中配置Https双向认证,需要使用JDK自带的keytool工具,在命令行方式下,生成服务器证书申请文CSR,然后到CA签发服务器证书。