最近接到一个项目,客户的项目可能会被外网访问,所以需要把发布的项目做成https的协议,客户提供了.cre和.key的证书,由于之前没有接触过https的相关知识,只知道https可以对浏览器发送到服务器的数据进行加密处理,通过不同的博客整理了一下思路,想要实现https的部署要经过:
1.tomcat支持的SSL证书是.jks,所以第一步需要把.cre和.key的证书转成.jks的,关于这些证书的区别可以参考https://blog.freessl.cn/ssl-cert-format-introduce/,接下来就是怎么转换的问题,网上大部分的办法是通过linux系统中的openssl命令去把.cre和.key的证书转成pkcs12证书,再把pkcs12证书转成jks格式。测试过了确实可以,不过被朋友安利了一个网站可以直接转。。。(我都转完了他才告诉我)附上网址:https://www.myssl.cn/tools/merge-jks-cert.html
2.拿到了jks文件以后就需要把这个文件配置到tomcat中去了,因为我们的项目是打成war包发布到tomcat中的,另外如果是springboot项目是可以通过配置然后打成jar包实现https发布的,原理都是一样的,因为springboot项目通过的是内置的tomcat启动。这里我只讲一下tomcat的配置过程
首先把生成的.jks文件放到一个路径下面,推荐就放到tomcat下的conf下,因为我们要修改的就是conf下的server.xml,
找到
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
certificateFile="conf/localhost-rsa-cert.pem"
certificateChainFile="conf/localhost-rsa-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
-->
把注释去掉修改成以下配置,其中keystoreFile就是jks文件的路径,keystorePass就是生成jks文件时候的密码
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="conf/my.jks" keystorePass="123456"
clientAuth="false" sslProtocol="TLS">
</Connector>
以上配置完成后如果要让其它的请求都跳转到https的话就需要把其它的请求的redirectPort配置到443,例如
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
然后重启tomcat就可以用https访问拉~