tomcat 配置 SSL

笔者:何钢


一、 配置环境


1.1  tomcat 简介


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


1.2  ssl(server socket layer) 简介


在网络上信息在源 - 宿的传递过程中会经过其它的计算机。一般情况下,中间的计算机不会监听路过的信息。但在使用网上银行或者进行信用卡交易的时候有可能被监视,从而导致个人隐私的泄露。由于 internet intranet 体系结构的原因,总有某些人能够读取并替换用户发出的信息。随着网上支付的不断发展,人们对信息安全的要求越来越高。因此 netscape 公司提出了 ssl 协议,旨在达到在开放网络 (internet) 上安全保密地传输信息的目的,这种协议在 web 上获得了广泛的应用。 之后 ietf(www.ietf.org) ssl 作了标准化,即 rfc2246 ,并将其称为 tls transport layer security ),从技术上讲, tls1.0 ssl3.0
.3  ssl 工作原理

ssl协议使用不对称加密技术实现会话双方之间信息的安全传递。可以实现信息传递的保密性、完整性,并且会话双方能鉴别对方身份。不同于常用的http协议,我们在与网站建立ssl安全连接时使用https协议,即采用https://ip:port/的方式来访问。


当我们与一个网站建立https连接时,我们的浏览器与web server之间要经过一个握手的过程来完成身份鉴定与密钥交换,从而建立安全连接。具体过程如下:



  1. 用户浏览器将其 ssl 版本号、加密设置参数、与 session 有关的数据以及其它一些必要信息发送到服务器。
  2. 服务器将其 ssl 版本号、加密设置参数、与 session 有关的数据以及其它一些必要信息发送给浏览器,同时发给浏览器的还有服务器的证书。如果配置服务器的 ssl 需要验证用户身份,还要发出请求要求浏览器提供用户证书。
  3. 客户端检查服务器证书,如果检查失败,提示不能建立 ssl 连接。如果成功,那么继续。
  4. 客户端浏览器为本次会话生成 pre-master secret ,并将其用服务器公钥加密后发送给服务器。
  5. 如果服务器要求鉴别客户身份,客户端还要再对另外一些数据签名后并将其与客户端证书一起发送给服务器。
  6. 如果服务器要求鉴别客户身份,则检查签署客户证书的 ca 是否可信。如果不在信任列表中,结束本次会话。如果检查通过,服务器用自己的私钥解密收到的 pre-master secret ,并用它通过某些算法生成本次会话的 master secret
  7. 客户端与服务器均使用此 master secret 生成本次会话的会话密钥 ( 对称密钥 ) 。在双方 ssl 握手结束后传递任何消息均使用此会话密钥。这样做的主要原因是对称加密比非对称加密的运算量低一个数量级以上,能够显著提高双方会话时的运算速度。
  8. 客户端通知服务器此后发送的消息都使用这个会话密钥进行加密。并通知服务器客户端已经完成本次 ssl 握手。
  9. 服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。并通知客户端服务器已经完成本次 ssl 握手。
  10. 本次握手过程结束,会话已经建立。双方使用同一个会话密钥分别对发送以及接受的信息进行加、解密。

    1.4  所需软件包



    • tomcat 4.0.2
      用途: web server

      下载: http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.3/bin/
    • jsse 1.0,2
      用途:用来产生 tocmcat 使用的秘钥对 (keystore)

      下载: http://java.sun.com/products/jsse/
    • openssl 0.9.9.6 用途:用来产生ca证书、签名并生成ie可导入的pkcs#12格式私钥。
      下载: http://www.openssl.org/
    • genrsa [ 产生密钥命令 ] ╟out [ 密钥文件输出路径 ] 1024 [ 密钥位数 ]


      3. 生成待签名的证书


      openssl req -new -out mageca/ca-req.csr -key mageca/ca-key.pem


      req[ 产生证书命令 ]-new[ 新生成 ]-out[ 证书文件输出路径 ]-key[ 私钥文件路径]


      4. ca 私钥自签名


                    配置步骤


      2.1  建立自己的 ca 证书


      1. openssl apps 目录下建立自己的 ca 目录,例如: mageca


      mkdir mageca


      2. 生成 ca 密钥


      openssl genrsa -out mageca/ca-key.pem 1024

    • openssl x509 -req -in mageca/ca-req.csr -out mageca/ca-cert.pem -signkey mageca/ca-key.pem -days 365
    • x509[ 签发 x509 证书命令] -req[ 输入待签发证书 ]-in[ 输入待签发证书文件路径 ]-out[ 产生 x509 证书文件输出路径 ]-signkey[ 自签发密钥文件路径 ]-days [证书有效期 ]╟ca [签发跟证书 ]-cakey[ 根证书密钥文件 ] ╟cacreateserial[ 创建序列号 ]


       

      [ ] 将自动生成的 ca-key.srl 文件拷贝到创建的 ca 目录下 .


       

      2.2  配置 tomcat 4.x


       

      2.2.1        建立服务器证书


       

      [ ] 在本文中用符号 "%jdk_home%" 来表示 jdk 的安装位置,用符号 "%tcat_home%" 表示 tomcat 的安装位置。


       

      1.         建立工作目录


       

      %jdk_home% bin 目录下建立自己的 server 目录,例如: server


       

      mkdir server


       

      2.         生成 server 密钥对


       

      %jdk_home% /bin/keytool -genkey -alias tomcat_server -validity 365 -keyalg rsa -keysize 1024 -keypass changeit -storepass changeit -dname "cn=localhost, ou=department, o=company, l=beijing, st=beijing, c=cn" -keystore server/server_keystore


       

       -genkey[ 产生密钥对 ]-alias[ 密钥对别名 ]-validity[ 密钥有效期 ]-keyalg[ 密钥算法参数 ]-keysize[ 密钥位数 ]-keypass[ 密钥保护密码 ]-storepass[ 存储密码 ]-dname[ 别名相关附加信息 ]-keystore[ 密钥存储文件路径 ]

 

[ ]  -alias 后的 tomcat_server 是密钥对的名字可替换为自己需要的名字;


-keypass -storepass 后的 changeit 为保护密码必须 6 位,将其替换为你的密码即可;


-dname 为包含的 server 信息。其中 cn 是服务器的名字一定要与 web 服务器中设置的一样。


3.         生成待签名证书


%jdk_home% /bin/keytool -certreq -alias tomcat_server -sigalg md5withrsa -file server/server.csr -keypass changeit -keystore server/server_keystore -storepass changeit


-certreq[ 产生待签名证书 ]-alias[ 证书别名 ]-sigalg[ 证书算法参数 ]-file [ 产生文件输出路径 ]-keypass[ 密钥保护密码 ]-keystore[ 存储文件路径 ]-storepass[ 存储密码]

4.         ca 私钥签名


openssl x509 -req -in server/server.csr -out server/server-cert.pem -ca mageca/ca-cert.pem -cakey mageca/ca-key.pem -days 365


[注] 先将生成的 server.csr 文件 ftp linux openssl 的目录下的 server 子目录中, ftp 的传输模式应设为 bin 模式,以下同。


2.2.2        ca 根证书和服务器证书导入 tomcat


1.         导入 ca 根证书


ca 根证书( ca-cert.pem ftp java 工作目录下的 ca 子目录中


%jdk_home%/bin/keytool -import -v -trustcacerts -storepass changeit -alias my_ca_root -file ca/ca-cert.pem -keystore %jdk_home%/jre/lib/security/cacerts

-import[ 导入命令 ]-v ╟trustcacerts[ 导入信任证书 ] ╟storepass[ 存储密码 ]-alias[ 证书别名 ]-file[ 证书文件路径 ]-keystore[ 导入文件路径 ]


[ ] 此处的 -storepass 为默认的“ changeit ”。 -alias ca 根证书的别名。


2.         导入服务器证书


将服务器证书( server-cert.pem ftp java 工作目录下的 server 子目录中。


%jdk_home%/bin/keytool -import -v -trustcacerts -storepass changeit -alias tomcat_server -file server/server-cert.pem -keystore server/server_keystore


[ ] 此时的 -storepass 为生成证书时输入密码。 -alias 为服务器证书的别名。

3.         查看证书


查看ca证书


keytool -list -keystore %jdk_home%/jre/lib/security/cacerts


查看服务器证书


keytool -list -keystore server/server_keystore


2.2.3        修改 tomcat 的配置文件


修改 conf 目录下 server.xml 文件找到以下内容去掉其注释并修改。


<!-- define an ssl http/1.1 connector on port 8443 -->


    <connector classname="org.apache.catalina.connector.http.httpconnector"


               port="8443" minprocessors="5" maxprocessors="75"


               enablelookups="false"


              acceptcount="10" debug="0" scheme="https" secure="true">


      <factory classname="org.apache.catalina.net.sslserversocketfactory"


               clientauth="true" protocol="tls"


keystorefile="c:/jakarta-tomcat-4.0-b1/conf/server_keystore" keystorepass="780608"

/>


    </connector>


然后把文件 server/ server_keystore 复制到目录 %tcat_home%\conf\


2.3  配置 ie 客户端


2.3.1        建立 client 证书


1.          openssl apps 目录下建立自己的 client 目录,例如: client


2.                   生成 client 密钥对


openssl genrsa -out client/ client ╟key.pem 1024


3.                   生成待签名的证书


openssl req -new -out client/ client-req.csr -key client/ client-key.pem

4.                   ca 私钥签名


openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey c lient/client-key.pem -ca ca/ca-cert.pem -cakey ca/ca-key.pem -cacreateserial -days 365


5.                   生成 client 端可以导入的个人证书


openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12


pkcs12[ 生成pks12格式证书命令 ]-export[ 导出文件 ]-clerts[ 仅导出client证书 ]-in[ 输入的client证书文件路径 ]-inkey[ client证书密钥文件路径 ]-out[ 导出pks12格式文件路径]


2.3.2        ca 证书与 client 证书导入 ie


1.         导入 ca 根证书

将已经 ftp java 工作目录下 ca 子目录中的 ca-cert.pem 改名为 ca-cert.cer


client 端的 ie 中使用 < 工具 >,< internet 选项 >,< 内容 >,< 证书 >,< 导入 >, 把我们生成的 ca 根证书导入,使其成为用户信任的 ca


2.         导入 client 证书


client 证书( client.p12 ftp client 端,把 client.p12 导入到 client 端的 ie 中作为 client 证书,导入过程同上

              ie 浏览器使用 ssl 协议访问 tomcat


1.         执行 %tcat_home%/bin/startup.bat 启动 tomcat 4.x


2.         ie 浏览器的地址栏中输入 https://localhost:8443 ,如果前面的操作都正确,应该可以看到 tomcat 的欢迎页面。同时状态栏上的小锁处于闭合状态,表示您已经成功地与服务器建立了要求客户端验证的 ssl 安全连接。


 


posted on 2006-07-18 16:40 liujg 阅读(753) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

文章档案

相册

收藏夹

boddiy

搜索

最新评论

阅读排行榜

评论排行榜