SSL 或者Secure Socket Layer是一种允许web浏览器和web服务器通过一个安全的连接进行交流的技术这意味着将被发送的数据在一端被翻译成密码传送出去然后在另一端解开密码再进行处理这是一个双向的过程也就是浏览器和服务器都需要在发送数据之前对它们进行加密
SSL协定的另一个重要方面是认证(Authentication)这就是说在你开始试图通过一个安全连接与一个web服务器交流的时候这个服务器会要求你的浏览器出示一组证件通过鑒定的方式来证明这就是你所声明的网站
在某些情况下服务器还会要求你的web浏览器的认证书证明你就是你所说的那个人这就是所知的客户认证尽管实际情况中更多地用在商务对商务(BB)交易而不是对个人用户
但大多数有SSL功能的web服务器不要求客户认证(Client Authentication)
证书
为了能实施SSL一个web服务器对每个接受安全连接的外部接口(IP 地址)必须要有相应的证书(Certificate)关于这个设计的理论是一个服务器必须提供某种合理的保证以证明这个服务器的主人就是你所认为的那个人这个证书要陈述与这个网站相关联的公司以及这个网站的所有者或系统管理员的一些基本联系信息
这个证书由所有人以密码方式签字其他人非常难伪造对于进行电子商务(e commerce)的网站或其他身份认证至关重要的任何商业交易认证书要向大家所熟知的认证权威(Certificate Authority (CA))如VeriSign或Thawte来购买这样的证书可用电子技术证明属实实际上认证权威单位会担保它发出的认证书的真实性如果你信任发出认证书的认证权威单位的话你就可以相信这个认证书是有效的
在许多情况下认证并不是真正使人担忧的事系统管理员或许只想要保证被服务器传送和接收的数据是秘密的不会被连接线上的偷窃者盗窃到庆幸的是Java提供相对简单的被称为keytool的命令行工具可以简单地产生自己签名的证书自己签名的证书只是用户产生的证书没有正式在大家所熟知的认证权威那里注册过因此不能确保它的真实性但却能保证数据传输的安全性
认证也许很重要也许不重要完全决定于网站的需要
用Tomcat来配置SSL主要有下面这么两大步骤
一生成证书
在命令行下执行
%Java_home%\bin\keytool genkey alias tomcat keyalg RSA
在此命令中keytool是JDK自带的产生证书的工具把RSA运算法则作为主要安全运算法则这保证了与其它服务器和组件的兼容性
这个命令会在用户的home directory产生一个叫做 keystore 的新文件在执行后你首先被要求出示keystore密码Tomcat使用的默认密码是 changeit (全都是小写字母)如果你愿意你可以指定你自己的密码你还需要在serverxml配置文件里指定自己的密码这在以后会有描述
你会被要求出示关于这个认证书的一般性信息如公司联系人名称等等这些信息会显示给那些试图访问你程序里安全网页的用户以确保这里提供的信息与他们期望的相对应
你会被要求出示密钥(key)密码也就是这个认证书所特有的密码(与其它的储存在同一个keystore文件里的认证书不同)你必须在这里使用与keystore密码相同的密码(目前keytool会提示你按ENTER键会自动帮你做这些)
如果一切顺利你现在就拥有了一个可以被你的服务器使用的有认证书的keystore文件
二配置tomcat
第二个大步骤是把secure socket配置在$CATALINA_HOME/conf/serverxml文件里$CATALINA_HOME代表安装Tomcat的目录一个例子是SSL连接器的元素被包括在和Tomcat一起安装的缺省serverxml文件里它看起来象是这样
$CATALINA_HOME/conf/serverxml
< Define a SSL Coyote HTTP/ Connector on port >
< !
< Connector
port= minProcessors= maxProcessors=
enableLookups=true disableUploadTimeout=true
acceptCount= debug= scheme=https secure=true;
clientAuth=false sslProtocol=TLS/>
>
Connector元素本身其默认形式是被注释掉的(commented out)所以需要把它周围的注释标志删除掉然后可以根据需要客户化(自己设置)特定的属性一般需要增加一下keystoreFile和 keystorePass两个属性指定你存放证书的路径(如keystoreFile=C:/keystore)和刚才设置的密码(如 keystorePass=)关于其它各种选项的详细信息可查阅Server Configuration Reference
在完成这些配置更改后必须象重新启动Tomcat然后你就可以通过SSL访问Tomcat支持的任何web应用程序只不过指令需要像下面这样https://localhost: