• springboot配置SSL自签名证书


    1.证书生成

    每一个JDK或者JRE里都有一个工具,叫做:keytool,安装了jdk或jre之后,配置好JAVA环境之后,就可以直接在控制台使用该命令生成自签名证书:

    在控制台输入:

    keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore E:Desktopsslkeykeystore.p12 -validity 3650

    命令参数说明:

    1.-alias 证书别名

    2.-storetype 指定密钥仓库类型

    3.-keyalg 生证书的算法名称,RSA是一种非对称加密算法 

    4.-keysize 证书大小 

    5.-keystore 生成的证书文件的存储路径和文件名

    6.-validity 证书的有效期

    2.Spring Boot配置SSL

    将证书复制到项目根目录,修改application.yml文件:

    server:
      port: 8443
      ssl:
        key-alias: tomcat
        key-store-password: root123
        key-store-type: PKCS12
        key-store: classpath:keystore.p12

    到这一步,已经可以通过HTTPS来访问Web了

    3.HTTP自动转向HTTPS

    在spring boot入口类中添加如下代码:

    ①spring boot1.x的配置:

    // http转向https

    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
      TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
        @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(connector());
      return tomcat;
    }
    
    @Bean
    public Connector connector() {
      Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
      connector.setScheme("http");
      connector.setPort(8080);
      connector.setSecure(false);
      connector.setRedirectPort(8443);
      return connector;
    }

    ②springboot 2.x的配置:

        @Bean
        public ServletWebServerFactory 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(connector());
            return tomcat;
        }
    
        @Bean
        public Connector connector() {
            Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
            connector.setScheme("http");
            connector.setPort(8080);
            connector.setSecure(false);
            connector.setRedirectPort(8443);
            return connector;
        }
  • 相关阅读:
    23种设计模式之过滤模式
    23种设计模式之建造者模式
    23种设计模式之桥接模式
    23种设计模式之策略模式
    Redis缓存相关问题
    docker命令大全
    过滤器filter和springmvc拦截器的区别及实现
    23种设计模式之装饰器模式
    Model ModelMap ModelView三者的区别你造吗
    解决并发问题的一般思路及使用redis实现秒杀
  • 原文地址:https://www.cnblogs.com/lkc9/p/10665083.html
Copyright © 2020-2023  润新知