SpringBoot 2.x.x以上版本配置SSL開啓HTTPS訪問,HTTP自動轉HTTPS

1/生成證書

直接使用java自帶的命令keytool來生成,生成命令如下:

keytool -genkey -alias server -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650

各個參數的含義:

0.-alias 別名

1.-storetype 指定密鑰倉庫類型

2.-keyalg 生證書的算法名稱,RSA是一種非對稱加密算法 

3.-keysize 證書大小 

4.-keystore 生成的證書文件的存儲路徑 

5.-validity 證書的有效期

如下圖所示:

2/application.properties文件配置證書,啓用HTTPS

生成證書後,將keystone文件拷貝到我們項目的src/main/resources下,然後修改application.properties文件,添加HTTPS支持。在application.properties中添加如下代碼:

#SpringBoot啓動端口指定
server.port=9999
# 證書目錄
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=QC_class
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=server

如下圖所示:

3/添加SSL配置類,開啓HTTP自動轉向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.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * SSLConfig
 *
 * @author QC班長
 * @since 2019/12/25
 */
@Configuration
public class SSLConfig {
    //SSLConfig
    @Bean
    public TomcatServletWebServerFactory servletContainer() { //springboot2 新變化
        TomcatServletWebServerFactory tomcatServletWebServerFactory = 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);
            }
        };

        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8080);//Connector監聽的http的端口號,端口號可以自己指定
        connector.setSecure(false);
        connector.setRedirectPort(9999);//監聽到http的端口號後轉向到的https的端口號,端口號可以自己指定

        tomcatServletWebServerFactory.addAdditionalTomcatConnectors(connector);
        return tomcatServletWebServerFactory;
    }
}

 

發佈了303 篇原創文章 · 獲贊 256 · 訪問量 175萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章