Tomcat既能够做为独立的Servlet容器,也能够做为其余HTTP服务器附加的Servlet容器。若是Tomcat在非独立模式下工做,一般没必要配置SSL,由它从属的HTTP服务器来实现和客户的SSL通讯。Tomcat和HTTP服务器之间的通讯无须采用加密机制,HTTP服务器将解密后的数据传给Tomcat,并把Tomcat发来的数据加密后传给客户。html
若是Tomcat做为独立的Java Web服务器,则能够根据安全须要,为Tomcat配置SSL,它包含如下两个步骤:java
(1) 准备安全证书。web
(2) 配置Tomcat的SSL链接器(Connector)。算法
我在前面的《SSL简介》一文中讲过,得到安全证书有两种方式:一种方式是到权威机构购买,还有一种方式是建立自我签名的证书。这里就介绍第二种获取证书的方式,毕竟免费的嘛!浏览器
SUN公司提供了制做证书的工具keytool。在JDK 1.4之后的版本中都包含了这一工具,它的位置为<JAVA_HOME>\bin\keytool.exe。此外,也能够到SUN的网站上下载,下载地址以下:tomcat
http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security安全
经过keytool工具建立证书的命令为:服务器
- keytool -genkeypair -alias "tomcat" -keyalg "RSA"
以上命令将生产一对非对称密钥和自我签名的证书,这个命令中几个参数的意思以下:网络
首先会提示输入keystore的密码,这里我输入的密码是sunchis。工具
而后提示输入我的信息,如姓名、组织单位和所在城市等,只要输入真实信息便可。
接着会提示输入信息是否正确,输入“y”表示信息正确。
最后要求输入<Tomcat>的主密码,这里设置与keystore相同的密码,所以只需根据提示按回车键便可。
以上命令将在操做系统的用户目录下生成名为“.keystore”的文件。我当前登陆到操做系统的用户名是XuLiang,那么在Wnidows下,文件的位置为:
C:\Documents and Settings\XuLiang\.keystore
在Linux下,该文件的位置为:home\XuLiang\.keystore
另外,若是但愿生成的keystore文件存放在其余目录中,能够再keytool命令中加入-keystore参数,这个参数用来指定keystore文件的存放位置,例如如下命令将在D:\下生成名为“sunchis.keystore”的文件:
- keytool -genkeypair -alias "tomcat" -keyalg "RSA" –keystore "D:\sunchis.keystore"
查看已生成的证书的命令为:
- keytool -list -keystore "C:\Documents and Settings\XuLiang\.keystore"
在Tomcat的server.xml文件中,已经提供了现成的配置SSL链接器的代码,只要把<Connector>元素的注释去掉便可:
- <!—
- Define a SSL HTTP/1.1 Connector on port 8443
- This connector uses the JSSE configuration, when using APR, the
- connector should be using the OpenSSL style configuration
- described in the APR documentation
- -->
- <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
- maxThreads="150" scheme="https" secure="true"
- clientAuth="false" sslProtocol="TLS"
- keystoreFile="C:\Documents and Settings\XuLiang\.keystore"
- keystorePass="SUNCHIS"
- ciphers="sunchis"
- />
实际上,基于SSL的HTTPS使用的默认端口是443。但Tomcat在这里将HTTPS端口设置为8443。<Connector>配置里的一些属性参数以下表:
属 性 | 描 述 |
clientAuth | 若是设为true,表示Tomcat要求全部的SSL客户出示安全证书,对SSL客户进行身份验证 |
keystoreFile | 指定keystore文件的存放位置,能够指定绝对路径,也能够指定相对于<CATALINA_HOME>(Tomcat安装目录)环境变量的相对路径。若是此项没有设定,默认状况下,Tomcat将从当前操做系统用户的用户目录下读取名为“.keystore”的文件。 |
keystorePass | 指定keystore的密码,若是此项没有设定,在默认状况下,Tomcat将使用“changeit”做为默认密码。 |
sslProtocol | 指定套接字(Socket)使用的加密/解密协议,默认值为TLS,用户不该该修改这个默认值。 |
ciphers | 指定套接字可用的用于加密的密码清单,多个密码间以逗号(,)分隔。若是此项没有设定,在默认状况下,套接字可使用任意一个可用的密码。 |
因为SSL技术已创建到绝大多数浏览器和Web服务器程序中,所以,仅需在Web服务器端安装服务器证书就能够激活SSL功能了。
若是上述的第一步和第二步已经配置完毕,那么就能够重启Tomcat服务器了,而后从IE浏览器中以HTTPS方式来访问在Tomcat服务器上的任何一个Web应用。如今咱们就来访问一下这个地址:
当Tomcat收到这一HTTPS请求后,会向客户的浏览器发送服务器的安全证书,IE浏览器接受到证书后,将向客户显示安全警报窗口,以下图:
在安全警报窗口中的第一行提示信息为:“您与该站点交换的信息不会被其余人查看或更改。但该站点的安全证书有问题。”这句话的意思是,一方面,该安全证书非权威机构颁发,不能做为有效的验证对方身份的凭据。另外一方面,假如与对方通讯,通讯数据会通过加密后在网络上传输,所以不会被他人监视或修改。
若是单击“【否】”按钮,就表示不信任该服务器出示的安全证书,所以浏览器会结束与Tomcat服务器的通讯。
若是单击“【是】”按钮,表示信任Tomcat服务器出示的安全证书,浏览器将创建与Tomcat服务器的SSL会话,Tomcat服务器就会把客户请求的数据发送过来。
若是单击“【查看证书】”按钮,将出现证书窗口,以下图:
从图中能够看到证书的“颁发者”和“颁发给”都是同一我的,这说明是自我签名的证书,非权威机构颁发。
从证书的详细信息中能够看出,在证书中公布了证书发送者的身份和公钥。而私钥只有证书发送者拥有,不会向证书接受者公开。