tomcat实现SSL单向认证(tomcat5)

来源:互联网 发布:linux查看进程占用端口 编辑:程序博客网 时间:2024/05/17 16:01

转自:http://cnzhangleon.lofter.com/post/4b3a3_855ca

一、基础知识

 Tomcat 简介

Tomcat是Apache Jakarta的子项目之一,作为一个优秀的开源web应用服务器,全面支持jsp1.2以及servlet2.3规范。因其技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的web应用服务器。

 https(Secure Hypertext Transfer Protocol)安全超文本传输协议 简介

https是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层。

它是由Netscape开发并内置于其浏览器中,旨在达到在开放网络(Internet)上安全保密地传输信息的目的。

用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的完全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。。

SSL (Secure Socket Layer)简介

为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。

具体分析见:点击打开链接

 二、tomcat实现SSL配置

 第一步 生成KeyStore

keytool -genkey -alias tomcat -keyalg RSA –keysize 1024 –validity 730 -keystore D:\server.keystore

生成.keystore文件在 用户目录下
输入keystore密码: ************
您的名字与姓氏是什么?
[Unknown]: localhost
您的组织单位名称是什么?
[Unknown]: dept
您的组织名称是什么?
[Unknown]: Inc
您所在的城市或区域名称是什么?
[Unknown]: bj
您所在的州或省份名称是什么?
[Unknown]: bj
该单位的两字母国家代码是什么
[Unknown]: CN
CN=localhost, OU= dept, O= Inc, L=bj, ST=bj, C=CN 正确吗?
[否]: Y

输入的主密码
(如果和 keystore 密码相同,按回车):*************

注意: localhost,是网站的域名或者ip,根据实际情况填写,比如 www.baidu.com  192.168.0.85  否则会出现证书上的名称无效,或者与站点名称不匹配。

 建议:将生成的 server.keystore文件,放到%TOMCAT_HOME%或其子目录中(如:%TOMCAT_HOME%/conf)

(其实放哪里都一样,只是放到%TOMCAT_HOME%里面会方便一些)

 第二步 修改server.xml

  修改%TOMCAT_HOME%/conf/server.xml

去掉下面SSL HTTP那个注释,修改为如下:

注意不同版本的修改代码不同,具体形式见注释!!!!

Xml代码(例子)

  <Connector port="8443" protocol="HTTP/1.1" connectionTimeout="20000"               SSLEnabled="true"              maxThreads="150"              scheme="https"              secure="true"              clientAuth="false"              sslProtocol="TLS"                keystoreFile="/conf/server.keystore"             keystorePass="changeit" />  

 keystoreFile 是server.keystore放置的位置,keystorePass是密码 (默认密码是changeit)

 

第三步

重启Tomcat,访问地址https://ip:8443/

 

(附录:)tomcat的配置文件SSL部分详细说明
 

配置文件server.xml,SSL部分:

Xml代码

19           <!– A "Connector" represents an endpoint by which requests are received  

20                and responses are returned. Documentation at :  

21                Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)  

22                Java AJP  Connector: /docs/config/ajp.html  

23                APR (HTTP/AJP) Connector: /docs/apr.html  

24                Define a non-SSL HTTP/1.1 Connector on port 8080  

25           –> 

26           <Connector  port="8443" maxHttpHeaderSize="8192" 

27               maxThreads="150" 

28               minSpareThreads="25" 

29               maxSpareThreads="75" 

30               enableLookups="false" 

31               disableUploadTimeout="true" 

32               acceptCount="100" 

33               scheme="https" 

34               secure="true" 

35               clientAuth="false" 

36               sslProtocol="TLS" 

37               keystoreFile="D:/Tomcat/conf/tomcatKey.keystore" 

38               keystorePass="changeit" 

39               algorithm="SunX509" 

40           /> 

41           <!-- A "Connector" represents an endpoint by which requests are received 

42                and responses are returned. Documentation at : 

43                Java HTTP Connector: /docs/config/http.html (blocking & non-blocking) 

44                Java AJP  Connector: /docs/config/ajp.html 

45                APR (HTTP/AJP) Connector: /docs/apr.html 

46                Define a non-SSL HTTP/1.1 Connector on port 8080 

47           --> 

48           <Connector  port="8443" maxHttpHeaderSize="8192" 

49               maxThreads="150" 

50               minSpareThreads="25" 

51               maxSpareThreads="75" 

52               enableLookups="false" 

53               disableUploadTimeout="true" 

54               acceptCount="100" 

55               scheme="https" 

56               secure="true" 

57               clientAuth="false" 

58               sslProtocol="TLS" 

59               keystoreFile="D:/Tomcat/conf/tomcatKey.keystore" 

60               keystorePass="changeit" 

61               algorithm="SunX509" 

62           /> 

 

属性说明:

 port:     这个port属性(默认值是8443)是 TCP/IP端口数码,Tomcat在其上监听安全连接。你可以把它更改成任何你愿意要的数值(如默认的https通信,数目是443)。不过,在许多操作系统中,要想在比1024小的端口数码上运行Tomcat,需要特殊的设置(它超出了这个文档资料的范围)。
 
redirectPort: 如果你在这里更改端口数值,你还必须更改在non-SSL连接器上的redirectPort 这个属性特定的值。这允许Tomcat自动地redirect那些试图访问有安全限制页面的用户,指明根据 Servlet 2.4 Specification要求,SSL是必需的
 
clientAuth: 如果你想要Tomcat要求所有的SSL客户在使用这个socket时出示用户认证书,把这个值设定为 true 。如果你想要Tomcat要求出示用户认证书,但是如果没有认证书也可以, 就把这个值设定为want 。
 
keystoreFile: 如果你产生的keystore文件不在Tomcat期望的默认地方(一个叫做.keystore 的文件在Tomcat运行的主目录),就添加这个属性。你可以指定一个绝对路径名称, 或者一个由$CATALINA_BASE环境变量而派生的相对路径名称。
 
keystorePass: 如果你使用一个不同的keystore(以及认证书)密码,而不是Tomcat期望的密码 (就是changeit),添加这个元素。
 
keystoreType: 如果使用一个PKCS12 keystore的话,就添加这个element。 有效的值是JKS 和 PKCS12
 
sslProtocol: 要在这个socket上被使用的加密/解密协定。如果你在使用Sun的JVM,我们不提倡更改 这个值。据报道,TLS协定的IBM's 1.4.1 实现与一些通用的浏览器不兼容。 如果是这样,就使用value SSL
 
ciphers: 这个socket允许使用的由逗号分隔开的加密密码列单。默认的情况下,任何可用的密码都允许被使用。
 
algorithm: 可用的X509算法。默认是Sun的实现( SunX509 )。 对于IBM JVMs,你应该使用值 IbmX509。对于其他卖主,查阅JVM文档资料来 找正确的值。
 
truststoreFile: 用来验证用户认证书的TrustStore文件。
 
truststorePass: 访问TrustStore的密码。默认值就是keystorePass的值。
 
truststoreType: 如果你在使用与KeyStore不同格式的TrustStore,添加这个元素。 合法的值是JKS和PKCS12
 
keyAlias: 如果 keystore 里面有多个 key,你可以为用这个选项为加入的 key 起一个名字。 如果没有指定名字,使用时 keystore 内的第一个 key 将会被使用