Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1181615
  • 博文数量: 181
  • 博客积分: 4968
  • 博客等级: 上校
  • 技术积分: 1867
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-13 21:52
文章分类

全部博文(181)

文章存档

2015年(2)

2013年(6)

2012年(22)

2011年(41)

2010年(27)

2009年(51)

2008年(32)

我的朋友

分类: LINUX

2012-01-12 16:50:42

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
最新版本可以去 ,我用的是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

genrsa[生成CA私钥]

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

2048[密钥位数]

2 生成待签名证书

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

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

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

3 用CA私钥进行自签名

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

x509[生成x509的CA根证书]

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

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

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

-days[有效时间(天)]

建立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

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

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

-validity[密钥有效期]

-keyalg[加密算法]

-keysize[加密位数]

-keypass[密钥保护密码]

-storepass[存储密码]

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

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

2 生成待签名证书

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

-file[生成的待签名证书的路径]

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选项会出现如下错误:
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:

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已经存在,那么会报错:

keytool错误: java.io.IOException: Keystore was tampered with, or password was incorrect

解决办法之一,是将 原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

port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https"
secure="true" SSLEnabled="true"
存储路径
keystoreFile="/rpyca/server/server_keystore"
密码
keystorePass="123456"
是否需要客户端验证
clientAuth="true"
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浏览器的地址栏中输入 ,如果前面的操作都正确的话,应该可以看到Tomcat的欢迎页面。同时状态栏上的小锁处于闭合状态,表示您已经成功地与服务器建立了要求客户端验证的SSL安全连接。

阅读(2963) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

sdievenfor2013-04-25 10:08:30

可以打开tomcat欢迎页面 但打不开项目。http却可以打开。