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