前言
本文档主要是总结通过配置tomcat后,实现由原来的http访问改为https的访问方式
本文档使用到的环境
- jdk1.7.0
- tomcat7.0.64
开始着手配置
先通过jdk自带的keytool工具生成证书
先win+R打开cmd窗口,然后执行命令
keytool -genkey -alias tomcat -keyalg RSA -keystore E:\sslkey\tomcat.keystore -validity 36500
参数说明:
- -alias:别名
- -keyalg RSA:算法
- -keystore:指定生成证书的位置和证书名称
- -validity:有效期,天单位,默认值是90天
执行命令之后会提示输入一些问题
说明:
- 输入keystore密码:此处需要输入大于6个字符的字符串
- “您的名字与姓氏是什么?”这是必填项,并且必须是TOMCAT部署主机的域名或者IP[如:gbcom.com 或者 10.1.25.251],就是你将来要在浏览器中输入的访问地址
- “你的组织单位名称是什么?”、“您的组织名称是什么?”、“您所在城市或区域名称是什么?”、“您所在的州或者省份名称是什么?”、“该单位的两字母国 家代码是什么?”可以按照需要填写也可以不填写直接回车,在系统询问“正确吗?”时,对照输入信息,如果符合要求则使用键盘输入字母“y”,否则输入“n”重新填写上面的信息
- 输入的主密码,这项较为重要,会在tomcat配置文件中使用,建议输入与keystore的密码一致,设置其它密码也可以
完成上面的输入之后就会在指定的目录位置生成一个tomcat.keystore自签的证书文件了。
啥是自签的证书文件?
就是自己生成的证书,并不是官方生成的证书,除非是很正式的项目,否则使用自己签发的证书即可,因为官方生成证书是要花钱滴。
配置Tomcat服务器
找到并打开Tomcat下的conf/server.xml文件,在配置文件中的Service节点下增加多一个Connector
<Connector port="18443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
enableLookups="false"
acceptCount="100" disableUploadTimeout="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:/sslkey/tomcat.keystore"
keystorePass="111111"
/>
说明:
- port:这里默认的话是8443,我这里改成18443也可以
- clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
- keystoreFile:服务器证书文件路径,这里也可以是相对路径,如果把生成的tomcat.keysore文件拷贝到Tomcat容器的conf目录下,这里就可以写成
conf/tomcat.keystore
- keystorePass:服务器证书密码
这样配置完之后启动tomcat,再到浏览器中通过 https://localhost:18443/app
请求就可以访问成功了!
可能遇到的问题:
我当时按网上的步骤配置完server.xml之后启动tomcat时报了一个错
Connector attribute SSLCertificateFile must be defined when using SSL with APR
当时tomcat是这样配置的
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="D:/sslkey/tomcat.keystore" keystorePass="111111"/>
后来改成
<Connector port="18443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
enableLookups="false"
acceptCount="100" disableUploadTimeout="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:/sslkey/tomcat.keystore"
keystorePass="111111"
/>
修改的地方就是把protocol="HTTP/1.1"
改成protocol="org.apache.coyote.http11.Http11Protocol"
原因好像是他们用的是tomcat6,而我用的是tomcat7
http访问自动转成https访问
如果想把http请求都能够自动的编程https请求的话,可以做下面的配置
配置web.xml
打开tomcat下的conf/web.xml文件
在文件末尾上加上这段配置
<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
这样配置完之后,在浏览其中输入http的请求都会转成https的方式
小结
配置tomcat http访问改成https主要是三个步骤:
- 利用jdk自带的keytool生成证书
- 配置tomcat的server.xml
- 如果想http自动编程https,就再配置一下tomcat的web.xml