本机电脑完全按照以下步骤生成,证实可用.
先进入本地jdk的bin目录:
使用keytool命令生成证书:
keytool
-genkey
-alias tomcat(别名)
-keypass 123456(别名密码)
-keyalg RSA(算法)
-keysize 1024(密钥长度)
-validity 365(有效期,天单位)
-keystore D:/keys/tomcat.keystore(指定生成证书的位置和证书名称)
-storepass 123456(获取keystore信息的密码)
快捷版keytool -genkey -alias boke -keypass 123456 -keyalg RSA -keysize 1024 -validity 3650 -keystore E:/Akeys/boketomcat.keystore -storepass 123456
控制台输出
E:\java\JDK7\bin>keytool -genkey -alias boke -keypass 123456 -keyalg RSA -keysize 1024 -validity 3650 -keystore E:/Akeys/boketomcat.keystore -storepass 123456
您的名字与姓氏是什么?
[Unknown]: 127.0.0.1
您的组织单位名称是什么?
[Unknown]: 127.0.0.1
您的组织名称是什么?
[Unknown]: boke
您所在的城市或区域名称是什么?
[Unknown]: 上海
您所在的省/市/自治区名称是什么?
[Unknown]: 上海
该单位的双字母国家/地区代码是什么?
[Unknown]: ZH
CN=127.0.0.1, OU=127.0.0.1, O=boke, L=上海, ST=上海, C=ZH是否正确?
[否]: y
服务器证书生成成功,接下来为客户端生成证书:
keytool -genkey -alias bokeclient -keypass 123456 -keyalg RSA -keysize 1024 -validity 3650 -storetype PKCS12 -keystore E:/Akeys/boke.p12 -storepass 123456
控制台
E:\java\JDK7\bin>keytool -genkey -alias bokeclient -keypass 123456 -keyalg RSA -keysize 1024 -validity 3650 -storetype PKCS12 -keystore E:/Akeys/boke.p12 -storepass 123456
您的名字与姓氏是什么?
[Unknown]: 127.0.0.1
您的组织单位名称是什么?
[Unknown]: 127.0.0.1
您的组织名称是什么?
[Unknown]: boke
您所在的城市或区域名称是什么?
[Unknown]: 上海
您所在的省/市/自治区名称是什么?
[Unknown]: 上海
该单位的双字母国家/地区代码是什么?
[Unknown]: ZH
CN=127.0.0.1, OU=127.0.0.1, O=boke, L=上海, ST=上海, C=ZH是否正确?
[否]: y
然后再让服务器信任客户端证书
因为不能直接将PKCS12格式的证书库导入
必须先把客户端证书导出为一个单独的CER文件,使用如下命令:
keytool -export -alias msszj -keystore E:/Akeys/boke.p12 -storetype PKCS12 -keypass 123456 -file E:/Akeys/msszj.cer
这个地方输出的别名必须是上面客户端生成证书的别名,是要处理的别名
将该文件导入到服务器的证书库,添加为一个信任证书:
keytool -import -v -file E:/Akeys/msszj.cer -keystore D:/keys/boketomcat.keystore -storepass 123456
keytool -list -v -keystore E:/Akeys/boketomcat.keystore
然后把对面的证书导入到证书库里面,证书这块算是完成了
最后配置tomcat服务器
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="150"
scheme="https"
secure="true"
clientAuth="true"
sslProtocol="TLS"
keystoreFile="D:/keys/tomcat.keystore"
keystorePass="123456"
truststoreFile="D:/keys/tomcat.keystore"
truststorePass="123456" />
属性说明:
clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
keystoreFile:服务器证书文件路径
keystorePass:服务器证书密码
truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书
truststorePass:根证书密码
注意:
- 设置clientAuth属性为True时,需要手动导入客户端证书才能访问。
② 要访问https请求 需要访问8443端口,上面配置的port,访问http请求则访问Tomcat默认端口原来最开始的端口
博主遇到个很坑的问题就是从webservice 里面用证书时,wsdl文件有问题,导致对面访问不了https,但是从页面上访问https wsdl服务是没有问题的,这个时候需要检查你自己的wsdl是不是有问题,一般建议直接重写,不要接别人写好,或写一半的,因为你永远不知道被人给你挖多少坑