SpringBoot配置Https

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1]  。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面

生成证书

使用Java JDK自带生成SSL证书的工具keytool

生成证命令

C:UsersAdministrator>keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keysize 2048 -keystore "D:/tomcat.keystore"

通过此命令运行,则CMD命令窗口会提示输入密钥库口令

-alias 别名
-keypass 指定生成密钥的密码
-keyalg 指定密钥使用的加密算法(如 RSA)
-keysize 密钥大小
-validity 过期时间,单位天
-keystore 指定存储密钥的密钥库的生成路径、名称
-storepass 指定访问密钥库的密码

域名证书,可以通过阿里 或 腾讯云 来进行申请

参考,腾讯云域名证书申请流程:https://cloud.tencent.com/document/product/400/6814

项目配置证书

导入证书,把生成的tomcat.keystore放在resources里面

application.properties 或 application.yml 配置文件中配置相关https内容

server.port=8443

# 开启https,配置跟证书对应
server.ssl.enabled=true
server.ssl.key-store=classpath:tomcat.keystore
# server.ssl.key-store-type=JKS
server.ssl.key-store-type=JKS
# 密码
server.ssl.key-store-password=123456
# springboot2.x不需要配置
server.ssl.key-password=123456
# 别名
server.ssl.key-alias=tomcat

配置http协议跳转https

package com.dingsheng;

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.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class DingshengApplication {

    public static void main(String[] args) {
        SpringApplication.run(DingshengApplication.class, args);
    }

    // SpringBoot2.x配置HTTPS,并实现HTTP访问自动转向HTTPS
    @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(httpConnector());
        return tomcat;
    }

    @Bean
    public Connector httpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8080); // 监听Http的端口
        connector.setSecure(false);
        connector.setRedirectPort(8443); // 监听Http端口后转向Https端口
        return connector;
    }
}

相关其他博主文字,推荐大家可以参考

https://www.cnblogs.com/huanzi-qch/p/12133872.html

 

原文地址:https://www.cnblogs.com/liuyangjava/p/13488751.html