工做中使用了银行接口,须要部署单独的web服务器,接收https的请求,研究了一下tomcat 6进行双向https的配置,参考了网上的文章以及不断的摸索,总算小有心得,这里简单的整理和记录一下。html
一样使用的是jdk自带的keytool,废话很少说,直接上图,首先进入java_home\bin目录,执行以下命令:java
keytool -genkey -v -alias tomcat -keyalg RSA -keystore e:\keystore\tomcat.keystore -validity 36500web |
命令的做用是为服务器生成证书,别名为tomcat,有效期为100年,存放在E:\keystore目录,确认后,还须要填写一些信息,生成keystore文件,如图所示:apache
须要注意的是:这里的名字或姓氏,最好是填写ip地址或域名,本地也能够填写localhosy,填写其余的,则须要修改windows的hosts配置。接下来的客户端证书生成也同样。windows
一样的,执行下面的命令生成客户端的证书,为了导出IE或FireFoX,证书格式设置为PKCS12:tomcat
keytool -genkey -v -alias realfighter -key alg RSA -storetype PKCS12 -keystore e:\keystore\realfighter.p12安全 |
与服务端证书生成同样,也须要填写一些信息,生成p12文件,以下图所示:服务器
接下来,经过下面的命令,将p12转换成cer文件,以下所示,红色部分为你设置的客户端证书密码:spa
C:\Program Files\Java\jdk1.6.0_45\bin>keytool -export -alias realfighter -keysto re e:\keystore\realfighter.p12 orm -storetype PKCS12 -storepass urpwd -rfc -file e:\keystore\realfighter.cer |
以后,须要将生成的客户端证书,导入到服务端的证书库,以下所示:
C:\Program Files\Java\jdk1.6.0_45\bin>keytool -import -v -file e:\keystore\realf ighter.cer -keystore e:\keystore\tomcat.keystore |
接下来,须要进行tomcat的配置,使其支持https访问, 默认使用443端口,修改tomcat_home\conf\server.xml文件,去除两个Connector,注释掉,主要是禁止经过http:8080访问,以下:
<!-- <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> |
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="443" /> --> |
去除84行左右Connector的注释,修改以下:
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="e:/keystore/tomcat.keystore" keystorePass="urpwd" truststoreFile="e:/keystore/tomcat.keystore" truststorePass="urpwd" /> |
上面的keystoreFile和truststoreFile对应证书库和可信任证书库文件, 这里使用的是同一个,密码分别对应服务端密码和客户端密码。
接下来,启动tomcat,经过https://127.0.0.1/访问,默认访问的就是443端口,会出现访问错误的页面,以下:
咱们须要将客户端证书p12文件导入,以Google Chrome为例,在设置-->显示高级设置-->管理证书-->我的-->导入,以下:
直接下一步,选择p12文件,一路点下一步,中间须要填写一下证书的密码,完成后会在我的部分显示安装的证书,如图所示:
刷新以前的连接,会显示选择证书,以下图,点击肯定:
会显示连接不安全,直接忽视,点继续访问:
这样就访问成功了: