`
gwh_08
  • 浏览: 331822 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

tomcat+ssl服务器端单向认证

    博客分类:
  • ssl
 
阅读更多
<!—  
    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\Administrator\.keystore" 
              keystorePass="SUNCHIS" 
              ciphers="sunchis" 
    /> 

 

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工具创建证书的命令为:

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

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

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

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

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

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

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

keytool生成证书的过程

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

C:\Documents and Settings\Administrator\.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" 

 二、配置SSL连接器

在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\Administrator\.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站点

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

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

https://localhost:8443

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

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

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

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

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

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

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

  • 大小: 62 KB
  • 大小: 47.6 KB
  • 大小: 34.5 KB
  • 大小: 68.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics