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

我的命令執行記錄如下,(前提:在本地要創建目錄,否則會失敗)

結果是生成了對應的文件,如下:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章