美文网首页
springboot项目配置ssl证书

springboot项目配置ssl证书

作者: 忧郁的冥 | 来源:发表于2023-03-15 16:13 被阅读0次

    一、操作流程

    1.获取证书文件

    从证书供应商处下载对应tomcat适配的jks文件以及秘钥。

    2.迁移证书

    a.将jks证书文件拷贝至项目资源目录resouces下。
    b.也可将证书存放至项目外,但后续配置路径需使用绝对路径。

    3.修改项目配置文件

    #https加密端口号 443
    server.port=443
    #SSL证书路径 一定要加上classpath:
    #改成自己需要的证书名
    server.ssl.key-store=classpath:*****.jks
    #SSL证书密码
    server.ssl.key-store-password=12345678
    #证书类型
    server.ssl.key-store-type=JKS
    server.ssl.enabled=true
    

    3.修改项目启动类

    package com.barry.login;
    
    import org.apache.catalina.Context;
    import org.apache.catalina.connector.Connector;
    import org.apache.tomcat.util.descriptor.web.SecurityCollection;
    import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
    import org.springframework.context.annotation.Bean;
    
    
    
    @SpringBootApplication
    
    public class DiyApplication  {
    
        public static void main(String[] args) {
            SpringApplication.run(DiyApplication.class, args);
        }
    
        /**
         * http重定向到https
         * @return
         */
        @Bean
        public TomcatServletWebServerFactory servletContainer() {
            TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
                @Override
                protected void postProcessContext(Context context) {
                    SecurityConstraint constraint = new SecurityConstraint();
                    constraint.setUserConstraint("CONFIDENTIAL");
                    SecurityCollection collection = new SecurityCollection();
                    collection.addPattern("/*");
                    collection.addMethod(DEFAULT_PROTOCOL);
                    constraint.addCollection(collection);
                    context.addConstraint(constraint);
                }
            };
            tomcat.addAdditionalTomcatConnectors(httpConnector());
            return tomcat;
        }
    
        @Bean
        public Connector httpConnector() {
            Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
            connector.setScheme("http");
            //Connector监听的http的端口号
            connector.setPort(8080);
            connector.setSecure(false);
            //监听到http的端口号后转向到的https的端口号
            connector.setRedirectPort(443);//可调整到自己所需要的端口号,与配置文件中端口统一
            return connector;
        }
    }
    

    4.修改pom配置

    防止java编译时对证书文件进行压缩破坏秘钥。
    配置完成后先执行clean。

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>*.jks</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>false</filtering>
                <includes>
                    <include>*.jks</include>
                </includes>
            </resource>
        </resources>
    
    </build>
    

    二、问题整理

    1.项目编译打包时报错

    Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources) on project ***: Input length = 1 -> [Help 1]
    解决方案:
    在上述pom中添加的配置项导致报错,删除后改为将证书文件迁移至项目外,配置文件路径改为绝对路径,证书就能生效。

    2.http的post请求被重定向至https的get方法导致无法定位。

    解决方案:
    在上述启动类的servletContainer方法中添加 collection.addMethod(DEFAULT_PROTOCOL);

    相关文章

      网友评论

          本文标题:springboot项目配置ssl证书

          本文链接:https://www.haomeiwen.com/subject/ilslrdtx.html