linux下tomcat6.0配置SSL

在安全通信中,不得不使用ssl,这样既保证安全,又显得专业.在看了多篇关于tomcat配置ssl的文章后,自己又总结了一下.我使用的是tomcat6.0,配置起来有些许差别.

参考网上文章
Tomcat下双向SSL安全认证
Windwos2000下配置Tomcat 5使用SSL

环境:
linux magic2.01
openssl-0.9.8e
jre1.5.0_05
apache-tomcat-6.0.13

本文目录:
安装openssl
建立ca根证书
建立server证书
配置tomcat支持ssl
建立个人证书

安装openssl
最新版本可以去www.openssl.org ,我用的是openssl-0.9.8e.tar.gz
tar -xzf openssl-0.9.8e.tar.gz
cd openssl-0.9.8e
./configure --prefix=XXXXX --openssldir=XXXXXXXX
(这里prefix是你想安装openssl的地方, openssldir就是你tar开的openssl源码的地方。好象所有的出名点的free software都是这个操行,configure, make , make test, make install, 搞定。)
./make
./make test
./make install
OK, 如果路上没有什么问题的话,搞定。

建立ca根证书
建立一张证书需要三步,1是生成系统私钥,2生成待签名证书,需要输入一些信息,3 生成x509证书,可以自已签名,用来做根证书;也可用其它证书来签名,生成根证书可以信任的证书.

下面是生成根证书
1生成CA私钥

openssl genrsa -out ca/cakey.pem 2048

[color=green][color=red]genrsa[生成CA私钥]

-out[生成的私钥的保存路径和名字]

2048[密钥位数] [/color][/color]

2 生成待签名证书

openssl req -new -out ca/careq.csr -key ca/cakey.pem

[color=green]req[生成待签名证书的选项]

-key[采用的CA私钥的路径] [/color]

3 用CA私钥进行自签名

openssl x509 -req -in ca/careq.csr -out ca/cacert.pem -signkey ca/cakey.pem -days 7200

[color=green]x509[生成x509的CA根证书]

-in[采用的待签名证书的路径]

-out[生成的CA根证书的路径]

-signkey[采用签名的私钥的路径]

-days[有效时间(天)] [/color]

建立server证书
因为tomcat为java的web容器,所以在实现ssl时,要用到java的安全机制,所以部分操作是用java的keytool来完成的.

1 生成KeyPair

keytool -genkey -alias tomcat_server -validity 7200 -keyalg RSA -keysize 2048 -keypass 652341 -storepass 652341 -dname " CN=hzvg00001, OU=vg.group, O=unimassystem.inc, L=hangzhou, ST=zhejiang, C=CN" -keystore server/server_keystore

[color=green]-genkey[生成私钥对的命令]

-alias[为生成的私钥对起个别名]

-validity[密钥有效期]

-keyalg[加密算法]

-keysize[加密位数]

-keypass[密钥保护密码]

-storepass[存储密码]

-dname[别名附加的相关信息] 这里的CN一般要根tomcat服务所在机子的名字一样,也就是hostname

-keystore[密钥存储文件路径] [/color]

2 生成待签名证书

keytool -certreq -alias tomcat_server -sigalg MD5withRSA -file server/server.csr -keypass 652341 -keystore server/server_keystore -storepass 652341

[color=green]-file[生成的待签名证书的路径] [/color]

3 用CA私钥进行签名

openssl x509 -req -in server/server.csr -out server/server-cert.pem -CA ca/cacert.pem -CAkey ca/cakey.pem -CAserial ca/ca-cert.srl -CAcreateserial -days 7200

这时便产生了一个服务端证书:server-cert.pem

如果没有-CAcreateserial选项会出现如下错误:
[color=red]Loading 'screen' into random state - done

Signature ok

subject=/C=CN/ST=shanghai/L=shanghai/O=topfounder/OU=technology/CN=redbeans luo

Getting CA Private Key

ca\ca-cert.srl: No such file or directory

3140:error:02001002:system library:fopen:No such file or directory:.\crypto\bio\{color}

bss_file.c:349:fopen('D:\sslca\ca\ca-cert.srl','rb')

3140:error:20074002:BIO routines:FILE_CTRL:system lib:.\crypto\bio\bss_file.c:351:[/color]
4 导入信任的CA根证书到JSSE的默认位置($JDK_HOME/jre/lib/security/cacerts)

keytool -import -v -trustcacerts -storepass 652341 -alias my_ca_root -file ca/cacert.pem -keystore $JAVA_HOME/jre/lib/security/cacerts

这里,如果$JDK_HOME/jre/lib/security/cacerts已经存在,那么会报错:
[color=red]
keytool错误: java.io.IOException: Keystore was tampered with, or password was incorrect[/color]

解决办法之一,是将 原cacerts文件删除即可,那样之前导入的信任的CA根证书的配置就都没了,令一个办法是取一个不同与其他导入的根证书的别名,也就是-alias 后面写个不同的名字(导入多个根证书的时候,就要这么做了)。

这一步他会询问:是否将这个根证书设为可信任的,如果不希望提示,加上选项:-noprompt就可以了,默认就是Y(yes)。

5 把CA签名后的server端证书导入keystore

keytool -import -v -trustcacerts -storepass 652341 -alias tomcat_server -file server/server-cert.pem -keystore server/server_keystore
这个步会一个风险,就是你用的keytool不是你刚才导入ca根证书的jdk的,这样的话,会报一个错误。

如果你不理采的话,证书导不进去。你更改alias可以导入进行去,但证书在使用中会出现问题,因为证书的发行者是他自己而不是根证书。
6 查看server端证书

keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts

keytool -list -v -keystore server/server_keystore

配置tomcat支持ssl
修改$TOMCAT_ROOT/conf/server.xml

使用java的ssl,而不是opensll
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />

<Connector protocol="org.apache.coyote.http11.Http11Protocol"
port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https"
[color=red]secure="true" SSLEnabled="true"
存储路径
keystoreFile="/rpyca/server/server_keystore"
密码
keystorePass="123456"
是否需要客户端验证
clientAuth="true"[/color]
sslProtocol="TLS"/>

建立个人证书
1 生成client私钥

openssl genrsa -out client/client-key.pem 2048
2 生成待签名证书

openssl req -new -out client/client-req.csr -key client/client-key.pem
3 用CA私钥进行签名

openssl x509 -req -in client/client-req.csr -out client/client.crt -signkey client/client-key.pem -CA ca/cacert.pem -CAkey ca/cakey.pem -CAserial ca/ca-cert.srl -CAcreateserial -days 7200
4 生成client端的个人证书

因为JSSE1.0.2没有完全实现了对PKCS#12格式文件的操作(只能读取,不能输出),所以在这里需要用openssl制作client端的个人证书(包含私钥)。
openssl pkcs12 -export -clcerts -in client/client.crt -inkey client/client-key.pem -out client/client.p12
5 安装信任的根证书

把D:\sslca\ca\ca-key.pem改名为D:\sslca\ca\ca-key.cer,在client端的IE中使用"工具 'Internet选项 ' 内容 ' 证书 ' 导入"把我们生成的CA根证书导入,使其成为用户信任的CA。
6安装个人证书

把client.p12导入到client端的IE中作为个人证书,导入过程同2.4.5。

启动Tomcat
执行%TCAT_HOME%\bin\startup.bat启动Tomcat

用IE访问Tomcat
在IE浏览器的地址栏中输入https://localhost:8443 ,如果前面的操作都正确的话,应该可以看到Tomcat的欢迎页面。同时状态栏上的小锁处于闭合状态,表示您已经成功地与服务器建立了要求客户端验证的SSL安全连接。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值