Springboot配置使用ssl,使用https

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

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

Springboot配置使用ssl,使用https_第1张图片

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

Springboot配置使用ssl,使用https_第2张图片

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\rave\tomcat.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

转载自:https://www.cnblogs.com/duanxz/p/9155509.html

你可能感兴趣的:(springboot)