springboot 外置tomcat 配置https访问的问题

项目需要同时支持 http 和 https 的接发,于是我上网查了一下,基本都是讲怎么配置内置tomcat的,方法也都大同小异,application里加 ssl 配置,然后加个connector之类的,但是由于我的项目是要部署在外置tomcat上的,所以网上那些就没用了,也查过 tomcat 怎么配置,参考的是这个博文:Springboot使用外置tomcat时https的设置_ITWANGBOIT的博客-CSDN博客
然而访问还是出现:这个网站无法提供安全连接;并且后台有报错:
org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误注意:HTTP请求解析错误的进一步发生将记录在DEBUG级别。
java.lang.IllegalArgumentException: 在方法名称中发现无效的字符串, HTTP 方法名必须是有效的符号.

我应该怎么正确配置呢?

可能需要的项目信息:前后端分离,前端纯html,前后端部署在同一个 tomcat 里作为2个 service 运行的,参考:Tomcat配置多个Service,多个同名的应用运行在一个tomcat下_我的成长之路!-CSDN博客_tomcat 多个service

贴上你的HTTPS配置信息,以及客户端访问的异常信息。

tomcat里改了web.xml和serve.xml,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>

server.xml 里面的:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
      <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/tomcat.keystore"
                         certificateKeystorePassword="123456"
                         type="RSA" />
      </SSLHostConfig>/>
 </Connector>

捕获

你只修改Server.xml中的Connector节点试试看,其他的都不要动。

<Connector
		port="443" 
		protocol="org.apache.coyote.http11.Http11NioProtocol"
		maxThreads="150" 
		SSLEnabled="true" 
		scheme="https" 
		secure="true"
		clientAuth="false" 
		sslProtocol="TLS"  
		keystoreFile="conf/tomcat.keystore"	
		keystorePass="123456"/>

还要注意看启动日志,是不是有异常。日志会显示是否成功加载了证书,是不是以HTTPS提供服务的。

启动日志异常倒是没有,是不是以 https 启动的,我也不是很确定,我截取一段 catalina log 吧:

-2021 16:25:46.542 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化协议处理器 ["http-nio-9999"]
13-Apr-2021 16:25:46.895 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化协议处理器 ["http-nio-8088"]
13-Apr-2021 16:25:46.901 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化协议处理器 ["https-jsse-nio-8443"]

最后是这样:

13-Apr-2021 16:26:18.461 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["http-nio-8088"]
13-Apr-2021 16:26:18.464 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["https-jsse-nio-8443"]
13-Apr-2021 16:26:18.472 信息 [main] org.apache.catalina.startup.Catalina.start [31,137]毫秒后服务器启动

比较全的:

13-Apr-2021 16:25:46.542 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化协议处理器 ["http-nio-9999"]
13-Apr-2021 16:25:46.895 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化协议处理器 ["http-nio-8088"]
13-Apr-2021 16:25:46.901 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化协议处理器 ["https-jsse-nio-8443"]
13-Apr-2021 16:25:47.334 信息 [main] org.apache.catalina.startup.Catalina.load 服务器在[2,600]毫秒内初始化
13-Apr-2021 16:25:47.378 信息 [main] org.apache.catalina.core.StandardService.startInternal 正在启动服务[Catalina]
13-Apr-2021 16:25:47.379 信息 [main] org.apache.catalina.core.StandardEngine.startInternal 正在启动 Servlet 引擎:[Apache Tomcat/9.0.35]
13-Apr-2021 16:25:47.780 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps\static]
13-Apr-2021 16:25:47.815 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps\static]的部署已在[35]毫秒内完成
13-Apr-2021 16:25:47.816 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps\views]
13-Apr-2021 16:25:47.844 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps\views]的部署已在[29]毫秒内完成
13-Apr-2021 16:25:47.849 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["http-nio-9999"]
13-Apr-2021 16:25:47.863 信息 [main] org.apache.catalina.core.StandardService.startInternal 正在启动服务[Catalina2]
13-Apr-2021 16:25:47.871 信息 [main] org.apache.catalina.core.StandardEngine.startInternal 正在启动 Servlet 引擎:[Apache Tomcat/9.0.35]
13-Apr-2021 16:25:47.914 信息 [main] org.apache.catalina.startup.HostConfig.deployWAR 正在部署web应用程序存档文件[C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps2\business_bank.war]
13-Apr-2021 16:25:57.563 信息 [main] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
13-Apr-2021 16:25:57.972 信息 [main] org.apache.catalina.core.ApplicationContext.log 2 Spring WebApplicationInitializers detected on classpath
13-Apr-2021 16:26:05.744 信息 [main] org.apache.catalina.core.ApplicationContext.log Initializing Spring embedded WebApplicationContext
13-Apr-2021 16:26:17.043 信息 [main] org.apache.catalina.startup.HostConfig.deployWAR web应用程序存档文件[C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps2\business_bank.war]的部署已在[29,130]ms内完成
13-Apr-2021 16:26:17.048 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps2\docs]
13-Apr-2021 16:26:17.163 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps2\docs]的部署已在[115]毫秒内完成
13-Apr-2021 16:26:17.168 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps2\examples]
13-Apr-2021 16:26:18.087 信息 [main] org.apache.catalina.core.ApplicationContext.log ContextListener: contextInitialized()
13-Apr-2021 16:26:18.106 信息 [main] org.apache.catalina.core.ApplicationContext.log SessionListener: contextInitialized()
13-Apr-2021 16:26:18.147 信息 [main] org.apache.catalina.core.ApplicationContext.log ContextListener: attributeAdded('StockTicker', 'async.Stockticker@230050cf')
13-Apr-2021 16:26:18.177 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps2\examples]的部署已在[1,009]毫秒内完成
13-Apr-2021 16:26:18.204 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps2\host-manager]
13-Apr-2021 16:26:18.292 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps2\host-manager]的部署已在[90]毫秒内完成
13-Apr-2021 16:26:18.296 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps2\json]
13-Apr-2021 16:26:18.358 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps2\json]的部署已在[62]毫秒内完成
13-Apr-2021 16:26:18.365 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps2\manager]
13-Apr-2021 16:26:18.429 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[C:\Users\huang\Desktop\apache-tomcat-9.0.35\apache-tomcat-9.0.35\webapps2\manager]的部署已在[63]毫秒内完成
13-Apr-2021 16:26:18.461 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["http-nio-8088"]
13-Apr-2021 16:26:18.464 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["https-jsse-nio-8443"]
13-Apr-2021 16:26:18.472 信息 [main] org.apache.catalina.startup.Catalina.start [31,137]毫秒后服务器启动

这句话就是了,在8443端口提供的https服务,你访问要自己添加 8443

https://localhost:8443/

哦哦哦,我一直访问的 http 的端口 :joy:

:grin: 成功了吧?你Connector 这个xml配置的端口是啥,你访问就得用啥。

nice!