首先下载证书,网上有很多免费的,也可以自己购买并域名然后会对应提供证书。以腾讯云为例,下载下来的解压后如图。
在这里插入图片描述
项目里我们操作有:
1、在resource中新建cert文件,并将证书中的Tomcat文件夹中的两个文件导入到cert文件夹中。
在这里插入图片描述
在这里插入图片描述
2、在yml文件中配置证书的信息,添加如下代码:
在这里插入图片描述

ssl:
    # SSL 证书路径,classpath 必不可少
    key-store: classpath:20200427.jks
    # SSL 证书密码
    key-store-password: WQXLFRGHT
    # 证书类型
    key-store-type: JKS
    # 证书别名
    key-alias: alias

其中key-store: 填写你的证书文件,比如key-store: classpath:cert/1234567_baidu.cn.jks
key-store-password: 填写pfx-password.txt文件中的密码
(注意!!!每个属性的分号后面必须加个空格,比如port: 443,而不是port:443。否则会报server.ssl无法被解析的错误)也可以搜一下yml的书写格式,不能使用tab键来设置空格等

然后在项目的启动类里添加如下方法:

/**
     * 配置一个 TomcatServletWebServerFactory bean
     * 将http 重定向到 https
     * @return
     */
    @Bean
    public TomcatServletWebServerFactory servletContainer() {

        TomcatServletWebServerFactory  tomcat = new TomcatServletWebServerFactory () {

            @Override
            protected void postProcessContext(Context context) {

                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
        return tomcat;
    }

    /**
     * 让我们的应用支持HTTP是个好想法,但是需要重定向到HTTPS,
     * 但是不能同时在application.properties中同时配置两个connector,
     * 所以要以编程的方式配置HTTP connector,然后重定向到HTTPS connector
     * @return Connector
     */
    
    private Connector initiateHttpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8080); // http端口
        connector.setSecure(false);
        connector.setRedirectPort(443); // application.properties中配置的https端口
        return connector;
    }

在这里插入图片描述

3、Tomcat中也需要进行证书的配置,可以参考这个博主的
Tomcat中ssl的配置
4、以上步骤都配置好后,启动项目,我遇到报错,信息如下:

23-Jun-2021 18:01:21.063 信息 [catalina-exec-25] org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误注意:HTTP请求解析错误的进一步发生将记录在DEBUG级别。

网上搜了下,解决:tomcat高版本对url中特殊符号限制的解决方法:在server.xml文件的Connector连接器中,增加这两个属性配置
relaxedPathChars="|{}[]^" relaxedQueryChars="|{}[]^"

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="utf-8" relaxedPathChars="|{}[],%"
      relaxedQueryChars="|{}[],%" />


Logo

快速构建 Web 应用程序

更多推荐