转载自:http://qixiaopeng.javaeye.com/blog/466298
SSL协议使用不对称加密技术实现双方之间信息的安全传递。可以实现信息传递的保密性、完整性,并且会话双方能鉴别对方身份。
与网站建立https连接时,浏览器与WEB SERVER之间要经过一个握手的过程来完成身份鉴定与密钥交换,建立安全连接。过程是:
1、用户浏览器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送到服务器
2、服务器将其SSL版本号、加密设置参数、与session有关的数据以及其它必要信息发送给浏览器,同时发给浏览器的还有服务器的证书。如果配置服务器的SSL需要验证用户身份,还要发出请求浏览器提供用户证书。
3、客户端检查服务器证书,如果检查失败,提示不能建立SSL连接,如果成功,则继续
4、客户端浏览器为本次会话生成pre-master secret,并将其用服务器公钥加密后发送给服务器。
5、如果服务器要求鉴别客户身份,客户端还要再对另外一些数据签名后并将其与客户端证书一起发送给服务器。
6、如果服务器要求鉴别客户身份,则检查签署客户证书的CA是否可信。如果不在信任列表中,结束本次会话。如果检查通过,服务器用自己的私钥解密收到的 pre-master secret,并用它通过某些算法生成本次会话的master secret。
7、客户端与服务器均使用此master secret生成本次会话的会话密钥(对称密钥)。在双方SSL握手结束后传递任何消息均使用此会话密钥。这样做的主要原因是对称加密比非对称加密的运算量低一个数量级以上,能够显著提高双方会话时的运算速度。
8、客户端通知服务器此后发送的消息都使用这个会话密钥进行加密。并通知服务器客户端已经完成本次SSL握手。
9、服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。并通知客户端服务器已经完成本次SSL握手。
10、本次握手过程结束,会话已经建立。双方使用同一个会话密钥分别对发送以及接受的信息进行加、解密。
1、生成服务器端证书文件
可以使用Windows系统或者Linux系统
(1) Windows环境
条件:已经安装JDK
步骤:
l 进入%JAVA_HOME%/bin目录
l 执行命令
keytool -genkey -alias tomcat -keyalg RSA -keystore F:\tomcat.keystore -validity 36500
参数简要说明:“F:\tomcat.keystore”含义是将证书文件保存在F盘,证书文件名称是tomcat.keystore ;“-validity 36500”含义是证书有效期,36500表示100年,默认值是90天
l 在命令行填写必要的参数:
截图如下:
截图部分说明:
A、输入keystore密码:此处需要输入大于6个字符的字符串
B、“您的名字与姓氏是什么?”这是必填项,并且必须是TOMCAT部署主机的域名或者IP[如:gbcom.com 或者 10.1.25.251],就是你将来要在浏览器中输入的访问地址
C、“你的组织单位名称是什么?”、“您的组织名称是什么?”、“您所在城市或区域名称是什么?”、“您所在的州或者省份名称是什么?”、“该单 位的两字母国家代码是什么?”可以按照需要填写也可以不填写直接回车,在系统询问“正确吗?”时,对照输入信息,如果符合要求则使用键盘输入字母“y”, 否则输入“n”重新填写上面的信息
D、输入<tomcat>的主密码,这项较为重要,会在tomcat配置文件中使用,建议输入与keystore的密码一致,设置其它密码也可以
l 完成上述输入后,直接回车则在你在第二步中定义的位置找到生成的文件
(2) Linux环境
条件:安装了JDK
步骤:
l 进入$JAVA_HOME/bin目录
l 执行命令
./keytool -genkey -alias tomcat -keyalg RSA -keystore /usr/local/ac/web/tomcat.keystore -validity 36500
参数简要说明:“/etc/tomcat.keystore”含义是将证书文件保存在路径/usr/local/ac/web/下,证书文件名称 是tomcat.keystore ;“-validity 36500”含义是证书有效期,36500表示100年,默认值是90天
l 在命令行填写必要的参数:
截图如下:
截图部分说明:
A、Enter keystore password:此处需要输入大于6个字符的字符串
B、“What is your first and last name?”这是必填项,并且必须是TOMCAT部署主机的域名或者IP[如:gbcom.com 或者 10.1.25.251],就是你将来要在浏览器中输入的访问地址
C、“What is the name of your organizational unit?”、“What is the name of your organization?”、“What is the name of your City or Locality?”、“What is the name of your State or Province?”、“What is the two-letter country code for this unit?”可以按照需要填写也可以不填写直接回车,在系统询问“correct?”时,对照输入信息,如果符合要求则使用键盘输入字母“y”,否则输入 “n”重新填写上面的信息
D、Enter key password for <tomcat>,这项较为重要,会在tomcat配置文件中使用,建议输入与keystore的密码一致,设置其它密码也可以
l 完成上述输入后,直接回车则在你在第二步中定义的位置找到生成的文件
2、配置TOMCAT服务器
(1) 如果你是在Windows环境中生成证书文件,则需要将生成的证书tomcat.keystore拷贝到Tomcat将要引用的位置,假设tomcat的 应用证书的路径是“/etc/tomcat.keystore”,则需要将证书文件拷贝到“etc/”下;如果是在Linux环境按照上述介绍的步骤生成 证书文件的话,此时证书文件已经在“etc/”下。
(2) 配置Tomcat,打开$CATALINA_HOME/conf/server.xml,修改如下,
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改参数=>
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
我项目里面的设置是:
<Connector executor="tomcatThreadPool"
port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
acceptCount="100"
useBodyEncodingForURI="true"
enableLookups="false"
redirectPort="443" />
不仅设置了ssl,还设置了线程池。
<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"/>
-->
去掉注释且修改参数=>
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true" useBodyEncodingForURI="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="tomcat.keystore" keystorePass="412385524"/>
注释:标识为淡蓝色的两个参数,分别是证书文件的位置和<tomcat>的主密码,在证书文件生成过程中做了设置
且这里记得要加上useBodyEncodingForURI="true"项,否则tomcat传递的时候汉字传递为乱码。
<!--
<Connector port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="8443" />
-->
修改参数=>
<Connector port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="443" />
(3) 打开$CATALINA_HOME/conf/web.xml,在该文件末尾增加:
<security-constraint>
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
3、上述配置完成后,重启TOMCAT后即可以使用SSL。IE地址栏中可以直接输入地址不必输入“http://” 或者 “https://” ;也可以输入 “http:// ” 会跳转成为 “https://” 来登录
4、注意事项:
(1) 生成证书的时间,如果IE客户端所在机器的时间早于证书生效时间,或者晚于有效时间,IE会提示“该安全证书已到期或还未生效”
(2) 如果IE提示“安全证书上的名称无效或者与站点名称不匹配”,则是由生成证书时填写的服务器所在主机的域名“您的名字与姓氏是什么?”/“What is your first and last name?”不正确引起的
5、遗留问题:
(1)如果AC主机不能通过域名查找,必须使用IP,但是这个IP只有在配置后才能确定,这样证书就必须在AC确定IP地址后才能生成
(2)证书文件只能绑定一个IP地址,假设有10.1.25.250 和 192.168.1.250 两个IP地址,在证书生成文件时,如使用了10.1.25.250,通过IE就只能使用10.1.25.250 来访问AC-WEB,192.168.1.250是无法访问AC-WEB的。
tomcat默认的ssl端口是8443,而标准的ssl端口是443,设置443之后,就不用在后面输入端口号就可以直接使用ssl端口访问了。
另外,linux中要在防火墙中设置对443和80端口的开放,否则也不能访问到资源。
---------------------------------------------------------
from:http://www.designxf.com/Article/200607/5791810.htm
tomcat实现SSL配置
编辑tomcat的配置文件server.xml,去掉下面SSL Connector的注释,修改为如下:
<!-- Define an SSL HTTP/1.1 Connector on port 8443 -->
<Connector className="org.apache.catalina.connector.http.HttpConnector"
port="8443" minProcessors="5" maxProcessors="75"
enableLookups="true"
acceptCount="10" debug="0" scheme="https" secure="true">
<Factory className="org.apache.catalina.net.SSLServerSocketFactory"
clientAuth="false" keystoreFile="tomcat.keystore"
keystorePass="tomcat" protocol="TLS"/>
</Connector>
keystoreFile的路径是TOMCAT的安装路径下的tomcat.keystore(使用keytool生成的证书库文件)
>keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore tomcat.keystore
keystoreFile保存了服务器端的证书库,用于客户端认证。
常用的配置属性:
clientAuth
如果想要Tomcat为了使用这个socket而要求所有SSL客户出示一个客户证书,置该值为true。
keystoreFile
如果创建的keystore文件不在Tomcat认为的缺省位置(一个在Tomcat运行的home目录下的叫.keystore的文件),则加上该属性。可以指定一个绝对路径或依赖$CATALINA_BASE环境变量的相对路径。
keystorePass
如果使用了一个与Tomcat预期不同的keystore(和证书)密码,则加入该属性。
keystoreType
如果使用了一个PKCS12 keystore,加入该属性。有效值是JKS和PKCS12。
sslProtocol
socket使用的加密/解密协议。如果使用的是Sun的JVM,则不建议改变这个值。据说IBM的1.4.1版的TLS协议的实现和一些流行的浏览器不兼容。这种情况下,使用SSL。
ciphers
此socket允许使用的被逗号分隔的密码列表。缺省情况下,可以使用任何可用的密码。
algorithm
使用的X509算法。缺省为Sun的实现(SunX509)。对于IBM JVMS应该使用ibmX509。对于其它JVM,参考JVM文档取正确的值。
truststoreFile
用来验证客户证书的TrustStore文件。
truststorePass
访问TrustStore使用的密码。缺省值是keystorePass。
truststoreType
如果使用一个不同于正在使用的KeyStore的TrustStore格式,加入该属性。有效值是JKS和PKCS12。
使用https://localhost:8443 就可以进行ssl连接的检测
----------------------------------------------------------------------------------------
上诉的SSL连接是客户端单向认证服务器,如果双向认证,将server.xml文件的Connector配置
clientAuth="false"
Java服务器端的证书库,服务器认证客户端时使用的根证书库。
证书库位置:JAVA_HOME/jre/lib/security/cacerts keystore密码为:changeit
将客户端个人证书的根证书导入服务器的证书库,就可以认证客户端。
服务器端证书的生成:
>keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore tomcat.keystore
>keytool -certreq -alias tomcat -file Server.csr -keystore tomcat.keystore 生成证书请求文件
使用openssl命令用根证书签名,再导入签名证书
>keytool -import -trustcacerts -alias tomcat -file Server.pem -keystore tomcat.keystore
注意-trustcacerts选项,使用服务器的证书库认证该证书,首先要将根证书导入cacerts中。
----------------------------------------------------------------------------------------
Tomcat配置SSL,我出现的问题
我用openssl创建了CA证书,Server证书,Client证书。
使用keytool将Server证书导入tomcat.keystore文件中,将Tomcat的配置文件server.xml关于SSL的配置设为keystoreFile=tomcat.keystore.SSL连接时,客户端认证tomcat.keystore中的服务器证书。
将CA证书导入$JAVA_HOME\jre\lib\security\cacerts这个keystore中,用于验证客户端证书。
在IE中安装CA证书和Client证书(pkcs12,包含私钥的个人证书形式)。
建立SSL连接https://localhost:8443,连接失败。
经过反复思量,知道问题所在,SSL连接时,客户端认证服务器时,需要验证服务器的签名,那么tomcat.keystore中就应该有Server的私钥。所以导入Server证书时,应该导入包含私钥的Server证书。
keytool命令不能导入私钥文件,可以通过在keystore中生成自签名证书,导出证书请求,用CA证书签名后,在导回的方法。
导回签名证书的过程
>keytool -import -trustcacerts -alias tomcat -file Server.pem -keystore tomcat.keystore
注意-trustcacerts选项,使用服务器的证书库认证该证书,首先要将根证书导入Java的根证书库中:JAVA_HOME\jre\lib\security\cacerts中。
----------------------------------------------------------------------------------------
分析IE实现实现SSL连接的中的证书双向认证过程
在地址栏中输入https://localhost:8443
客户端向服务器发送hello消息,tomcat服务器侦听8443端口,收到SSL连接的hello消息,服务器发送server certificate,并且发送client certificate request.客户端IE收到server certificate后取出issuer项,和IE受信任的根证书库中证书的subject比对,找到合适的根证书认证server certificate。并且同时向服务器发送client certificate,服务器收到client certificate后,tomcat服务器查找根证书库cacerts中的根证书的suject,找到合适的根证书认证client certificate.在认证的同时完成密钥协商。客户端认证结束后,IE会弹出"安全警报"对话框,用户可以查看服务器证书,以及服务器证书是否受信任,可以选择是否继续SSL连接。
分享到:
相关推荐
二、Tomcat实现SSL配置 **第一步:生成KeyStore** 使用`keytool`命令生成JKS类型的KeyStore文件,例如: ``` keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 730 -keystore D:\server....
通过 Tomcat 实现 SSL 双向认证需要同时配置 Web 服务器证书和客户端证书,并在服务器和客户端之间正确安装根证书。配置 Tomcat 实现 SSL 双向认证可以提高数据传输的安全性,保护网络通信的安全。
以上就是Windows环境下通过Tomcat实现SSL配置的详细过程,涉及到的主要知识点包括SSL/TLS协议、Java Keystore、keytool工具以及Tomcat的服务器配置。这个过程中,`java_security`标签可能指的是Java的安全机制,包括...
**Tomcat6 SSL配置文档** 在互联网安全领域,SSL(Secure Sockets Layer)协议是确保数据传输加密的重要手段,广泛应用于Web服务器与浏览器之间的通信。Tomcat作为一款流行的开源Java应用服务器,支持SSL配置,以...
https ssl Tomcat中实现https安全连接与SSL配置https ssl Tomcat中实现https安全连接与SSL配置https ssl Tomcat中实现https安全连接与SSL配置https ssl Tomcat中实现https安全连接与SSL配置
本文将详细介绍如何在 Tomcat 中实现 SSL 双向认证,包括使用 JDK 的 keytool 工具创建证书、配置 Tomcat 服务器和客户端证书等。 一、SSL 双向认证的重要性 在 Web 应用程序中,安全性是非常重要的,特别是在涉及...
通过本文档,可以成功配置 Tomcat 的 SSL 功能,实现 HTTPS 协议的支持。 一、准备工作 为了配置 Tomcat 的 SSL 功能,需要安装 JDK 1.5 或更高版本,并配置 JAVA_HOME 环境变量。此外,还需要安装 tomcat 6 。 ...
- 使用在线SSL检测工具检查SSL配置是否正确。 至此,我们已经成功地在Nginx和Tomcat上配置了阿里云的免费SSL证书,实现了HTTPS访问。这不仅提升了网站的安全性,也提高了用户的信任度。注意定期更新证书,保持其...
### Nginx 和 Tomcat 配置 SSL 与...通过以上步骤,可以实现 Tomcat 的 SSL 加密和负载均衡配置。需要注意的是,具体配置可能会因环境和需求的不同而有所变化。在实际操作过程中,应仔细检查官方文档以确保正确配置。
总的来说,Apache+Tomcat+SSL配置是一个涉及多方面知识的过程,包括网络协议、服务器配置、安全策略等。通过正确配置和使用相关插件,你可以构建起一个高效且安全的Web服务环境。在实际操作中,务必注意每个环节的...
通过上述步骤,我们成功地为Apache Tomcat服务器配置了SSL/TLS证书,从而实现了Web应用的数据加密传输。这对于提高网站的安全性至关重要。同时,我们也学习了如何生成自签名证书、如何配置Tomcat使其支持HTTPS服务...
本资源是一个 CentOS 下对 Nginx + Tomcat 配置 SSL 实现服务器 / 客户端双向认证配置示例。详细如何配置请参考博客《图文:CentOS 下对 Nginx + Tomcat 配置 SSL 实现服务器 / 客户端双向认证》,地址是:...
总的来说,这个压缩包提供了实现基于CAS的Tomcat SSO的完整流程,包括SSL配置和跨域SSO的解决方案。通过阅读和按照这些文档操作,你应该能够成功地在你的Tomcat环境中部署一个安全的单点登录系统。
### Tomcat更换SSL证书方法(JKS与PFX转换) 在IT行业中,为了保障网络通信的安全性,使用SSL证书加密已经成为了一种标准做法。对于使用Tomcat作为应用服务器的企业或个人来说,有时候会遇到需要更换SSL证书的情况,...
5. **修改Tomcat配置**:打开Tomcat的`conf/server.xml` 文件,找到`<Connector>` 标签,添加SSL配置。例如: ```xml SSLEnabled="true" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" ...
2. **重新启动Tomcat**: 保存`server.xml`后,重启Tomcat服务,SSL配置就会生效。 **五、测试SSL连接** 现在,你可以通过访问`https://your_domain:8443`来测试SSL连接是否成功。如果是自签名证书,浏览器可能会...
Tomcat作为一款流行的Java应用服务器,支持SSL配置以实现HTTPS协议,提供加密通信和服务器身份验证。本教程将深入讲解如何在Tomcat中配置SSL,以便在开发和部署Java Web应用时,能够提供安全的数据交换环境。 首先...