zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    跳台阶问题
    最大连续子数组和
    寻找和为定值的若干个数
    MySQL- 用Navicat通过隧道连接到远程数据库
    CDH- 测试mr
    Sqoop- sqoop将mysql数据表导入到hive报错
    CDH- CDH大数据集群运维
    Spring- 异常org.xml.sax.SAXParseException; systemId: http://www.springframework.org/schema/context/; lineNumber: 1; columnNumber: 55; 在 publicId 和 systemId 之间需要有空格。
    Spring- 通过Xml的方式完成Bean的实例化
    Spring- Bean的命名
  • 原文地址:https://www.cnblogs.com/lkc9/p/10665083.html
Copyright © 2011-2022 走看看