关于tomcat配置SSL,网上教程乱的很,但是很少有一篇文章就能够讲明白的。现在我写一个,只要你手里有.pem和.key文件,跟着文章做,肯定能配置成功。
1、服务器证书分很多种,目前的PKCS12位行业标准格式(文件后缀.p12或者.pfx)。那么我们第一步就是用.pem和.key来生成证书文件。
2、要生成PKCS12格式证书文件,需要openssl,没有的话可以自行下载或者使用我提供的,链接在文章下面(偶然在支付宝签名生成工具里面扒出来的)
3、拿到openssl文件,解压后,配置环境变量。网上有教程说需要重启,不过我在操作的时候没有重启。
4、配置完成后,可以先用命令行测试是否生效,输入openssl回车,如下图所示即为配置成功。
5、下面就是使用openssl来生成证书文件了。(假定收到的文件为cert.key和cert.pem)
注意命令最后的文件后缀,不管是.pfx或者是.p12都可以
openssl pkcs12 -export -inkey cert.key -in cert.pem -name test -out test.pfx
中途需要输入导出密码(enter export password),输入一个,做好记录。这时候控制台不显示的,输入完敲回车就可以。
再次确认刚才的密码(verifying-enter export password),控制台不显示,输入完成后回车。
6、这时候就可以去tomcat里面进行配置了,这里只讲一下server.xml中443端口标签要如何写。比如我刚才生成的文件名是test.pfx
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="/home/tomcat/conf/cert/test.pfx" <!--这里是证书文件存放路径,我写的是linux格式的-->
keystoreType="PKCS12" <!--这里是证书格式,.pfx和.p12都是PKCS12格式的-->
keystorePass="123456" <!--刚才输入的密码-->
clientAuth="false" sslProtocol="TLS"/>
7、重启tomcat,使用https尝试登录。
附1:openssl程序:https://pan.baidu.com/s/1MjrEEO7vu91xeEwEd9FQ0w
提取码:klm6
附2:tomcat如何强制https访问:在web.xml的welcome-file-list后,增加以下内容
<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>
添加后效果如下