TOMCAT
中使用HTTPS
的过程:
最近几天一直在搞一个小项目,就是写一个程序,通过HTTPS协议来传送文件。结果在配置HTTPS的时候遇到了不少问题,搞了两天才搞出来。还不一定明白呢。
一、JDK
的KEYTOOL
的使用
1
、生成KEY
"c:/Program Files/Java/jdk1.5.0_12/bin"/keytool.exe -genkey -alias tomcat -keyalg RSA
接着会做如下动作:
输入keystore密码: tomcat
您的名字与姓氏是什么?
[Unknown]: test
您的组织单位名称是什么?
[Unknown]: test
您的组织名称是什么?
[Unknown]: test
您所在的城市或区域名称是什么?
[Unknown]: tj
您所在的州或省份名称是什么?
[Unknown]: tj
该单位的两字母国家代码是什么
[Unknown]: 86
CN=jifeng, OU=ych, O=y3china, L=tj, ST=tj, C=86 正确吗?
[否]: y
输入<tomcat>的主密码
(如果和 keystore 密码相同,按回车):
2
、导出KEY
"c:/Program Files/Java/jdk1..0_12/bin"/keytool -export -alias tomcat -file tomcat.cer
输入keystore密码: tomcat
保存在文件中的认证 <tomcat.cer>
3
、将.keystore
导入c:/Program Files/Java/jdk1.5.0_12/jre/lib/security/cacerts
中的命令:
"c:/Program Files/Java/jdk1.5.0_12/bin"/keytool.exe -import -noprompt -trustcacerts -alias tomcat -file cacerts -keystore CustomKeystore -storepass tomcat
keytool错误: java.lang.Exception: 所输入的不是一个 X.509 认证
正确的命令:
"c:/Program Files/Java/jdk1.5.0_12/bin"/keytool.exe -import -alias tomcat -file tomcat.cer -noprompt -trustcacerts -storetype jks -keystore cacerts -storepass changeit
认证已添加至keystore中
注:
这里的
storepass
使用的是
changeit,而不是我们自己设置的命令。否则会报如下错误
keytool错误: java.io.IOException: Keystore was tampered with, or password was i
ncorrect
二、tomcat
配置:
<Connector port="8443"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"
clientAuth="want" sslProtocol="TLS"
keystore="C://Documents and Settings//jeff//.keystore"
keypass="tomcat"/>
注意:clientAuth="want"
,原来我设置的是clientAuth="true"
,结果不好用,于是改成了want
了。
三:说明:
我是在同一台机器上配置的SSL,并且在此机器上,作为客户端调用服务器上的程序,这里我觉得会有一个问题,就是我服务器的KEYSTORE和客户端的KEYSTORE都应该有。我原来只生成服务器端的KEYSTORE,结果总也过不去,于是我就打开了TOMCAT的调试功能“-Djavax.net.debug=all”,发现客户端每次调用服务器的程序时,都要去找“C:/Program Files/Java/jdk1.5.0_12/jre/lib/security”目录下的cacerts文件,看这里是否有值得信任的KEY。于是我把我的KEY又导入到这个文件中。