Tomcat配置HTTPS协议的请求
1、背景
tomcat原本默认请求方式就是http的,但是由于刚好手上在做一个项目,前后端分离的,把前端挂在了腾讯的静态网站托管上面去了,后端是直接挂在了服务器的tomcat上;
项目技术:ssm(其实无关项目的事情,全部都是在tomcat上面的配置)
2、问题描述:
根据上述的情景,需要将服务器的tomcat请求转为https的,不然的话,访问网页的时候就会出现一个情形:Mix…(我忘记了~打开浏览器的控制台就可以看到了),好像是什么混合内容的,直白点就是https请求方式的页面不能有使用http协议的后端请求;
3、至于获取域名、下载证书、自制证书等等的前期准备工作,这些百度都有一大堆了,我就不复述了;
4、正片开始:配置tomcat;
1) 将tomcat的配置文件 server.xml 中关于https的相关配置的注释解开
<!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443
This connector uses the NIO implementation. The default
SSLImplementation will depend on the presence of the APR/native
library and the useOpenSSL attribute of the
AprLifecycleListener.
Either JSSE or OpenSSL style configuration may be used regardless of
the SSLImplementation selected. JSSE style configuration is used below.
-->
<!-- port的值是配置好之后https的访问端口,可以在http协议配置处通过重定向方式转为https -->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
certificateKeystorePassword="30i799x41r"
type="RSA" />
</SSLHostConfig>
</Connector>
<!-- 这里是可加可不加, 影响不大 -->
<Connctor port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="8443" maxHttpHeaderSize="8192" />
值得注意的时候,这里其实保持原本的就行了,甚至都不用添加什么新的项;
证书的类型不同就使用不同的配置方式,我的是jks类型的,祥看上面最后一行注释 : the SSLImplementation selected. JSSE style configuration is used below.
;
证书放置的位置,我这里是与server.xml位于同一目录下,其他位置就使用绝对路径吧;
注意点: 在网上有很多老帖,两三年前的,会教你将 protocol 值设置为 HTTP/1.1 。千万不要这样做,不然的话,你的tomcat会直接崩掉,再也启动不起来那种,如果你不是很熟悉这个原因的话,可能你得再花很多时间去处理这个新问题。如果是直接在服务器上的tomcat倒是问题不大,如果是用docker挂载的容器,直接删掉重建吧。
2)在web.xml 配置文件中配置相关信息(直接滚轮滑动到最下面,写在 </web-app> 标签之前:
<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
<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>
这里提一下我自己遇到的小问题:
<auth-method>CLIENT-CERT</auth-method>
此处是横杠,而不是下划线,敲错了会导致配置失败不生效;
<realm-name>Client Cert Users-only Area</realm-name>
此处是Users-only,有一个s以及是横杠,敲错了也是会导致配置不生效;
以上两处都不是什么大问题,就是一些细节,错了就可能又浪费多一点时间;基本上按照上面配置好,就可以将http请求转为https方式的了;
PS: 如果配置完之后还是发现不太行,那就一步步排除问题,
首先确保整个项目是正常的,在http请求方式是能够正常访问的;
接着如果是被浏览器的访问策略拦截了,就百度,因为每种问题都有不同的原因;
如果出现tomcat那种404的话,就可以确定问题是你上面的配置问题,可以通过查看tomcat的启动日志,应该能够找到问题的所在。