Springboot 配置 https 的后端服务

由于项目需要,要实现https+wss服务,经过2天研究,终于通过Springboot配置成功https+wss服务,记录一下以此分享。

1、生成ssl证书方法(注意-alias的名称要与application的名称一致),两个方法都可以。

//keytool -genkey -alias myhttps -keyalg RSA -keysize 2048 -keystore E:\test.p12 -validity 365
//keytool -genkeypair -alias myhttps -keyalg EC -keysize 256 -validity 365 -keypass 你的密码 -keystore EC_keystore.jks -storepass 你的密码 -storetype jks

2、然后把证书copy的项目中resources目录,并修改application-xxx.yml根据需求放到自己放到不同的application-xxx.yml)。

    

3、新建HttpConnectorConfig类,详细如下:

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.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HttpConnectorConfig {
    @Value("${server.port}")
    private Integer port;

    /**
     * 获取Http连接器
     * @return Connector
     */
    public Connector getHttpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http"); // 使用http协议
        connector.setSecure(false); // 非安全传输
        connector.setPort(8080); // HTTP监听端口
        connector.setRedirectPort(port); // 重定向端口
        return connector;
    }

    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        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(getHttpConnector()); // 添加连接器
        return tomcat;
    }
}

4、这时https服务就可以,访问https://xxx.yy.zzz:端口/就可以了。

  特别说明,新写的demo到这里就结果了,访问https接口正常。但是目录的项目发现启动时间提示“Invalid keystore format”,还有一些莫名其妙的错误,请接着往下参考。

5、如果启动项目,报“Invalid keystore format”,这时修需求改pox.xml

      

 

posted @ 2023-10-20 10:22  不会游泳的怪鱼  阅读(187)  评论(0编辑  收藏  举报