http://www.kuqin.com/shuoit/20140615/340573.html

1SSL单向认证概念

  当客户端(服务请求方)向服务端(服务提供方)发起请求时,服务器端需要向客户端提供认证。服务端需要生成一个keystore和一个服务器密钥对儿(公钥和私钥),客户端需要生成一个truststore,然后导入服务端的公钥证书。

2keystore以及服务器密钥对儿的生成

keytool-genkeypair-aliascertificatekey-keyalgRSA-validity365-keystoreshfqkeystore.jks

这条命令会在生成keystore后接着生成一个密钥对儿。RSA是非对称密钥算法,也可以改为keytool支持的其他密钥算法,365代表的是证书的有效期,可以自己指定,shfqkeystore.jks是keystroe的名称,也可以自己指定。打开cmd命令行,输入:

keytool-genkeypair-aliascertificatekey-keyalgRSA-validity365-keystoreshfqkeystore.jks

会提示输入keystore的密码,接着会提示输入名字等信息,如下图:

补充:输入<certificatekey>的主密码,是指生成服务端证书的私钥。服务端私钥如果和keystore的相同的话,直接按回车。建议直接按回车,即服务端私钥和keystore的密码相同。如果两者的密码不相同的话在服务端tomcatserver.xml中配置完毕以后启动tomcat会报一个UnrecoverableKeyException:Cannotrecoverkey的异常(后面会介绍服务端tomcatserver.xml的配置的)。

keytool会把生成的keystore文件默认保存到C:Userslenovo路径下(用户目录下的计算机名称下)接下来生成的所有文件也都保存到此处。

3验证新生成的keystor文件以及证书信息

可以执行下面的命令:

keytool-list-v-keystoreshfqkeystore.jks

会显示出以下信息,如图:

4导出公钥证书

下面的命令可以导出自签公钥证书:

keytool-export-aliascertificatekey-keystoreshfqkeystore.jks-rfc-fileshfqcert.cer

其中shfqcert.cer是导出证书的名称,可以随便起个名字,shfqkeystore.jks是2中生成的keystore文件。

执行上面的命令会要求输入shfqkeystore的密码,会显示以下信息,如下图。

5Truststore的生成以及公钥证书的导入

把4生成的公钥证书shfqcert.cer导入到truststore中

Keytool-import-aliascertificatekey-fileshfqcert.cer-keystore

shfqtruststore.jks

shfqcert.cer是4导出的公钥证书,shfqtruststore.jks可以随便起,是生成的truststore的文件名。这条命令首先会生成一个truststore,然后导入4生成的公钥证书shfqcert.cer。

执行keytool-import-aliascertificatekey-fileshfqcert.cer-keystoreshfqtruststore.jks后,首先会提示输入truststore的密码,如下图:

6验证5生成的truststore文件

keytool-list-v-keystoreshfqtruststore.jks

shfqtruststore.jks是5生成的truststore文件名。

到此为止,keystore、truststore、公钥证书都已生成完毕。

7配置服务端的tomcat

找到tomcat安装路径下的conf路径下的server.xml文件

打开server.xml,找到

<!--

<Connectorport="8443"protocol="HTTP/1.1" SSLEnabled="true"

maxThreads="150"scheme="https"secure="true"

clientAuth="false"sslProtocol="TLS"/>

-->

这样一段注释,在这段注释下面添加如下一段代码:

<ConnectorSSLEnabled="true"acceptCount="100"clientAuth="false"

disableUploadTimeout="true"

enableLookups="false"maxThreads="25"

port="8443"keystoreFile="D:developToolsapache-tomcat-idmtomcat.keystore" keystorePass="111111"

protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"

secure="true"sslProtocol="TLS"/>

其中clientAuth=”false”表示是SSL单向认证,即服务端认证,port=”8443”是https的访问端口,keystoreFile="D:developToolsapache-tomcat-idmtomcat.keystore"是第一步中生成的keystore的保存路径,keystorePass="111111"是第一步生成的keystore的密码。

到此服务器端已经配置完毕,为了验证是否已经配置正确,我们可以在浏览器中进行验证。首先启动tomcat,然后在浏览器地址输入栏中输入:https://localhost:8443

如果看到如下截图的一个页面则表示服务端已经配置成功了。

之所以会出现“该网站的安全证书不受信任!”的警告是因为证书是自己签发的而不是一个权威的CA机构签发的。
最后还得在hosts文件中配置自己的IP地址,把IP地址映射为一个common name,这个common name就是您在第2步中生成服务器证书时候的“您的名字与姓氏是什么?”输入的名字。

8客户端配置

在客户端配置服务端的地址时要注意:比如https://shifengqiang:8443/syn/Users

这个地址协议格式是https主机名是shifengqiang,这个shifengqiang就是在第2步中生成服务器端证书时要求输入的“您的名字与姓氏是什么?”名字。8443是https协议默认的端口。

在客户端向服务器端同步代码前面加入这样一段代码:

System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");

System.setProperty("java.protocol.handler.pkgs", "com.ibm.net.ssl.internal.www.protocol");

StringtrustStorePath=

“D:developToolsapache-tomcat-idmshfqtruststore.jks”;

StringtrustStorePassword=“client”;

System.setProperty("javax.net.ssl.trustStore", trustStorePath);

System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);

其中trustStorePath是truststore的路径,trustStorePassword是truststore的密码。至此单向SSL配置完毕。

参考链接:http://zjumty.iteye.com/blog/1885356

在配置的过程中参考了网上大量的链接,有些链接没有做记录恕不一一列举。

https协议如何通过X509TrustManager接口实现自己创建的证书-Java/JavaSE

但是会报错误,请高手解决 谢谢
错误信息如下:
java.io.IOException: HTTPS hostname wrong: should be <调用的服务器的IP地址>
at sun.net.www.protocol.https.HttpsClient.checkURLSpoofing(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)

------回答---------
------其他回答(15分)---------

该不是因为证书里卖弄用的是hostname,你用的是ip吧?
听说这个对SSL来说有区别.

------其他回答(5分)---------

mark

about tomcat ssl的更多相关文章

  1. keytool生成证书与Tomcat SSL配置

    转自:http://tomhat.iteye.com/blog/2087673 一.Keytool介绍 Keytool是一个Java数据证书的管理工具.Keytool将密钥(key)和证书(certi ...

  2. SSL 通信原理及Tomcat SSL 配置

    SSL 通信原理及Tomcat SSL 双向配置 目录1 参考资料 .................................................................. ...

  3. SSL 通信原理及Tomcat SSL 双向配置

    SSL 通信原理及Tomcat SSL 双向配置 目录1 参考资料 .................................................................. ...

  4. SpringBoot 配置 Tomcat SSL

    SpringBoot 配置 Tomcat SSL SSL(Secure Sockets Layer , 安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密 ...

  5. spring boot启用tomcat ssl

    首先要生成一个keystore证书.参考:Tomcat创建HTTPS访问,java访问https,ssl证书生成:cer&jks文件生成摘录,spring-boot 这里复现一下完整过程: 安 ...

  6. Tomcat SSL的安装及配置中遇到问题

    配置tomcat服务器利用SSL进行加密. 一.生成密钥库 具体生成方式就不讲了,tomcat支持的keystore的格式有JKS,PKCS11和PKCS12 JKS是jdk /bin目录下keyto ...

  7. Tomcat - SSL操作大全

    简介 制作CSR申请文件 安装证书文件 客户证书认证 证书的备份(导出) 证书的恢复(导入)   简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,目前最新版本是6.0.20(截止 ...

  8. spring-boot+nginx+tomcat+ssl配置笔记

    如果你的tomcat应用需要采用ssl来加强安全性,一种做法是把tomcat配置为支持ssl,另一种做法是用nginx反向代理tomcat,然后把nginx配置为https访问,并且nginx与tom ...

  9. apache+jk+tomcat+ssl的https改造

    项目背景 公司项目要进行https的改造,目前在测试环境搭建了一下,参考了网上的例子(http://blog.csdn.net/whumr1/article/details/7804992) 这里把主 ...

随机推荐

  1. POJ3468 A Simple Problem with Integers(线段树延时标记)

    题目地址http://poj.org/problem?id=3468 题目大意很简单,有两个操作,一个 Q a, b 查询区间[a, b]的和 C a, b, c让区间[a, b] 的每一个数+c 第 ...

  2. CString转换成int CString类相应函数

    CString 型转化成 int 型 把 CString 类型的数据转化成整数类型最简单的方法就是使用标准的字符串到整数转换例程. 虽然通常你怀疑使用_atoi()函数是一个好的选择,它也很少会是一个 ...

  3. 在jybot下跑Selenium2Library

    应用场景:项目组要将原有SeleniumLibrary写的脚本切换到Selenium2Library(后称S2L)下,但是原来有很多Java写的库,综合考虑认为还是在Jython下跑比较合适.但是安装 ...

  4. ASP.NET读取配置文件发送邮件

    之前写过一篇文章C#使用SMTP发送邮件 后来做了改进,改成读取独立的配置文件,本文只记录读取配置文件的部分,发送部分见上面的链接. 读取配置文件C#代码: using System; using S ...

  5. C++100款开源界面库[转]

    (声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系列的 ...

  6. Delphi Data Types

    http://docwiki.embarcadero.com/RADStudio/XE6/en/Delphi_Data_Types Integer Data Types Type Descriptio ...

  7. 纯CSS打造Flow-Steps导航

    几个要点: 1.三角箭头效果是用border实现的,详细的可以google下CSS 三角 2.IE6下不支持border-color:transparent(透明),解决方法是先将其设置为一个不常用的 ...

  8. Java学习笔记(4)——JavaSE

    一.HashMap HashMap以键值对的形式存储对象,关键字Key是唯一的,不重复的 1,key可以是任何对象,Value可以任何对象 2,重复的key算一个,重复添加是替换操作(会覆盖原来的元素 ...

  9. Android 数据库打包随APK发布

    有些时候我们的软件用到SQLite数据库,这个时候怎么把一个做好的数据库打包进我们的APK呢,其实很简单,就是把我们的数据库文件放到我们的手机里,所以不必局限在哪个地方写这个代码,在第一次创建数据库的 ...

  10. impdp的一些实际问题解决方法

    之前在http://blog.csdn.net/bisal/article/details/19067515写过一篇关于expdp和impdp的实践的帖子.今天碰到个问题,有些内容没有介绍全,这里再补 ...