zoukankan      html  css  js  c++  java
  • Springboot配置使用ssl,使用https

    SSL(Secure Sockets Layer 安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密,SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持。SSL协议分为两层,SSL记录协议建立在TCP之上,为高层协议提供数据封装、压缩、加密等基本功能支持。SSL握手协议建立在SSL记录协议之上,用户实际数据传输开始前进行身份验证、协商加密算法、交换加密秘钥。

    1.生成证书,可以使自签名或者从SSL证书授权中心获得的。

    JDK中keytool是一个证书管理工具,可以生成自签名证书。 
    本人这里用的系统是deepin,然后生成命令如下(找不到keytoo命令的先去配置java环境) 
    我指定的名字叫tomcat.keystore 别名叫tomcat,密码自己设置,我这里用的tomcat,最后那个直接按得回车

    keytool -genkey -alias tomcat -keyalg RSA -keystore /home/gzr/tomcat.keystore

    我的命令执行记录如下,(前提:在本地要创建目录,否则会失败)

    结果是生成了对应的文件,如下:

    2.SpringBoot配置SSL

    1.先建立一个index.html到src/main/resources/static下,待会作为测试 
    2.将这个tomcat.keystore拷贝到项目根目录下(项目根目录,比如我的idea项目叫spring-cloud-demo01,然后这里我这个module叫springbootmy,所以我们的证书应该放在spring-cloud-demo01下) 
    3.让后配置application.properties

    #端口号
    server.port: 8443
    #你生成的证书名字
    server.ssl.key-store: E:work
    ave	omcat.keystore
    #密钥库密码
    server.ssl.key-store-password: duan123
    server.ssl.keyStoreType: JKS
    server.ssl.keyAlias: tomcat

    此刻启动项目,输入 https://localhost:8443/即可。

    3、配置自动跳转

    后面像你平时输入http://www.baidu.com会自动跳转到https看下实现吧,在运行主类里面,加入如下代码

    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.context.embedded.EmbeddedServletContainerFactory;
    import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
    import org.springframework.context.annotation.Bean;
    
    @SpringBootApplication
    public class SpringbootmyApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootmyApplication.class, args);
        }
    
        /**
         * it's for set http url auto change to https
         */
        @Bean
        public EmbeddedServletContainerFactory servletContainer(){
            TomcatEmbeddedServletContainerFactory tomcat=new TomcatEmbeddedServletContainerFactory(){
                @Override
                protected void postProcessContext(Context context) {
                    SecurityConstraint securityConstraint=new SecurityConstraint();
                    securityConstraint.setUserConstraint("CONFIDENTIAL");//confidential
                    SecurityCollection collection=new SecurityCollection();
                    collection.addPattern("/*");
                    securityConstraint.addCollection(collection);
                    context.addConstraint(securityConstraint);
                }
            };
            tomcat.addAdditionalTomcatConnectors(httpConnector());
            return tomcat;
        }
    
        @Bean
        public Connector httpConnector(){
            Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
            connector.setScheme("http");
            connector.setPort(8080);
            connector.setSecure(false);
            connector.setRedirectPort(8443);
            return connector;
        }
    
    }

    此时运行http://localhost:8080,会自动跳转到https://localhost:8443

  • 相关阅读:
    Linux更新时,出现无法更新锁
    Linux显示su:认证失败
    08 redis的缓存预热,雪崩,击穿,穿透问题以及常用的监控参数
    06 redis的哨兵系统的工作流程
    05 redis的主从复制机制的工作流程以及相关基础知识
    03 redis的事务以及锁、过期数据的删除策略、逐出算法、配置文件的核心配置参数
    02 jedis以及redis的持久化
    01 redis的5种基本数据类型的介绍,使用以及应用场景
    M1 MySQL事务知识点的总结
    02 Java文件读写通道的使用以及文件的基本操作方法
  • 原文地址:https://www.cnblogs.com/duanxz/p/9155509.html
Copyright © 2011-2022 走看看