`

Tomcat SSL配置及Tomcat CA证书安装

 
阅读更多
Tomcat既可以作为独立的Servlet容器,也可以作为其他HTTP服务器附加的Servlet容器。如果Tomcat在非独立模式下工作,通常不必配置SSL,由它从属的HTTP服务器来实现和客户的SSL通信。Tomcat和……

Tomcat既可以作为独立的Servlet容器,也可以作为其他HTTP服务器附加的Servlet容器。如果Tomcat在非独立模式下工作,通常不必配置SSL,由它从属的HTTP服务器来实现和客户的SSL通信。Tomcat和HTTP服务器之间的通信无须采用加密机制,HTTP服务器将解密后的数据传给Tomcat,并把Tomcat发来的数据加密后传给客户。

如果Tomcat作为独立的Java Web服务器,则可以根据安全需要,为Tomcat配置SSL,它包含以下两个步骤:

(1)准备安全证书。

(2)配置Tomcat的SSL连接器(Connector)。

一、准备安全证书

我在前面的《SSL简介》一文中讲过,获得安全证书有两种方式:一种方式是到权威机构购买,还有一种方式是创建自我签名的证书。这里就介绍第二种获取证书的方式,毕竟免费的嘛!

SUN公司提供了制作证书的工具keytool。在JDK 1.4以后的版本中都包含了这一工具,它的位置为<JAVA_HOME>\bin\keytool.exe。此外,也可以到SUN的网站上下载,下载地址如下:

http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security

通过keytool工具创建证书的命令为:

  1. keytool-genkeypair-alias"tomcat"-keyalg"RSA"

以上命令将生产一对非对称密钥和自我签名的证书,这个命令中几个参数的意思如下:

  • -genkeypair:生成一对非对称密钥。
  • -alias:指定密钥对的别名,该别名是公开的。
  • -keyalg:指定加密算法,本例中的采用通用的RAS加密算法

首先会提示输入keystore的密码,这里我输入的密码是sunchis。

然后提示输入个人信息,如姓名、组织单位和所在城市等,只要输入真实信息即可。

接着会提示输入信息是否正确,输入“y”表示信息正确。

最后要求输入<Tomcat>的主密码,这里设置与keystore相同的密码,因此只需根据提示按回车键即可。

点击放大图片
keytool生成证书的过程

以上命令将在操作系统的用户目录下生成名为“.keystore”的文件。我当前登录到操作系统的用户名是XuLiang,那么在Wnidows下,文件的位置为:

C:\Documents and Settings\XuLiang\.keystore

点击放大图片
证书存放的路径

在Linux下,该文件的位置为:home\XuLiang\.keystore

另外,如果希望生成的keystore文件存放在其他目录中,可以再keytool命令中加入-keystore参数,这个参数用来指定keystore文件的存放位置,例如以下命令将在D:\下生成名为“sunchis.keystore”的文件:

  1. keytool-genkeypair-alias"tomcat"-keyalg"RSA"–keystore"D:\sunchis.keystore"

查看已生成的证书的命令为:

  1. keytool-list-keystore"C:\DocumentsandSettings\XuLiang\.keystore"
点击放大图片
查看证书信息

二、配置SSL连接器

在Tomcat的server.xml文件中,已经提供了现成的配置SSL连接器的代码,只要把<Connector>元素的注释去掉即可:

  1. <!—
  2. DefineaSSLHTTP/1.1Connectoronport8443
  3. ThisconnectorusestheJSSEconfiguration,whenusingAPR,the
  4. connectorshouldbeusingtheOpenSSLstyleconfiguration
  5. describedintheAPRdocumentation
  6. -->
  7. <Connectorport="8443"protocol="HTTP/1.1"SSLEnabled="true"
  8. maxThreads="150"scheme="https"secure="true"
  9. clientAuth="false"sslProtocol="TLS"
  10. keystoreFile="C:\DocumentsandSettings\XuLiang\.keystore"
  11. keystorePass="SUNCHIS"
  12. ciphers="sunchis"
  13. />

实际上,基于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站点

由于SSL技术已建立到绝大多数浏览器和Web服务器程序中,因此,仅需在Web服务器端安装服务器证书就可以激活SSL功能了。

如果上述的第一步和第二步已经配置完毕,那么就可以重启Tomcat服务器了,然后从IE浏览器中以HTTPS方式来访问在Tomcat服务器上的任何一个Web应用。现在我们就来访问一下这个地址:

https://localhost:8443

当Tomcat收到这一HTTPS请求后,会向客户的浏览器发送服务器的安全证书,IE浏览器接受到证书后,将向客户显示安全警报窗口,如下图:

点击放大图片

在安全警报窗口中的第一行提示信息为:“您与该站点交换的信息不会被其他人查看或更改。但该站点的安全证书有问题。”这句话的意思是,一方面,该安全证书非权威机构颁发,不能作为有效的验证对方身份的凭据。另一方面,假如与对方通信,通信数据会经过加密后在网络上传输,因此不会被他人监视或修改。

如果单击“【否】”按钮,就表示不信任该服务器出示的安全证书,因此浏览器会结束与Tomcat服务器的通信。

如果单击“【是】”按钮,表示信任Tomcat服务器出示的安全证书,浏览器将建立与Tomcat服务器的SSL会话,Tomcat服务器就会把客户请求的数据发送过来。

如果单击“【查看证书】”按钮,将出现证书窗口,如下图:

点击放大图片
证书窗口

从图中可以看到证书的“颁发者”和“颁发给”都是同一个人,这说明是自我签名的证书,非权威机构颁发。

点击放大图片
证书的详细信息

从证书的详细信息中可以看出,在证书中公布了证书发送者的身份和公钥。而私钥只有证书发送者拥有,不会向证书接受者公开。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics