SpringBoot项目HTTP转HTTPS遇到的问题

参考了
springboot将http改造成https_springboot改https协议_迷途风哥的博客-CSDN博客
的配置我将https的相关配置改好后,启动项目收到报错
 

ERROR SpringApplication Application run failed
 org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server

报错信息显示tomcat启动失败。

向chatgpt提问后给了我几个方向

 

这个错误主要是由于 keystore 文件有误,导致嵌入式 Tomcat 服务器在启动时无法加载 keystore 文件。具体的原因可能如下:

  1. keystore 文件路径不正确

请确保在 application.propertiesapplication.yml 配置文件中正确指定了 keystore 文件的路径,并且该路径与实际的文件路径相符。如果 keystore 文件不存在或路径不正确会导致该错误。

  1. keystore 格式不正确

请确保您生成 keystore 文件时指定的格式与所配置的 server.ssl.key-store-type 属性相符(也可以通过省略此属性来使用默认值),否则嵌入式 Tomcat 服务器将无法加载 keystore 文件。如果您不确定 keystore 的格式,请使用以下命令来查看:

 
 $ keytool -list -v -keystore <your-keystore-file>  
 
  1. keystore 密码不正确

请确保在 server.ssl.key-store-password 属性中提供 keystore 的正确密码,并且该密码与实际的 keystore 密码相符。如果密码不正确,将无法加载 keystore 文件。

  1. keystore 中的证书或密钥不正确

如果你的 SSL 证书生成有问题,就可能会导致证书或密钥无法被正确加载。可以重新生成 SSL 证书并更新 keystore 文件。您可以使用以下命令来检查 keystore 文件中的证书和密钥:

 
 $ keytool -list -v -keystore <your-keystore-file>  
 

如果以上步骤都确认正确,可以检查 keystore 文件本身是否存在问题,例如文件损坏或格式不正确。您可以尝试重新生成 keystore 文件,并使用新生成的 keystore 文件来代替旧文件,并在 application.propertiesapplication.yml 中指定新文件的路径和密码。

经过反复检查,这个明显不符合实际情况。 

在检索资料过程中看到了这篇文章

在springboot中配置https安装证书 Unable to Start embedded TomCat_配置了ssl后unable to start embedded tomcat server_今晚打脑斧的博客-CSDN博客

这里提示说要配置ssl参数,增加一个配置类并且对http请求做重定向,但是他发出来的代码和我的springboot版本对不上,我的版本是2.6.14 问计chatgpt给出了修改方案

@Configuration
public class WebConfig {

    @Bean
    public TomcatServletWebServerFactory servletWebServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();

        // 配置 SSL
        Ssl ssl = new Ssl();
        ssl.setKeyStore("证书名");
        ssl.setKeyStorePassword("密码");
        factory.setSsl(ssl);

        // 配置 HTTPS 端口
        factory.setPort(443);

        // 将 HTTP 请求重定向至 HTTPS
        Connector connector = createHttpConnector();
        factory.addAdditionalTomcatConnectors(connector);

        return factory;
    }

    private Connector createHttpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setSecure(false);
        connector.setPort(80);
        connector.setRedirectPort(443);
        return connector;
    }
}

重启后启动正常了,可以通过https访问了! 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值