1. 程式人生 > 其它 >SpringBoot的SSL證書部署,HTTPS安全訪問

SpringBoot的SSL證書部署,HTTPS安全訪問

首先我們訪問未擁有證書的證書都是通過HTTP,如果需要變為安全訪問HTTPS需要部署證書,HTTPS:SSL+HTTP

首先我們可以訪問阿里雲或者騰訊雲申請免費的證書,這裡使用阿里雲來演示

申請阿里雲免費SSL證書

訪問阿里雲,搜尋SSL證書

進入SSL證書控制檯,建立一個免費的證書

然後點選證書申請

按照要求填寫申請,推薦CSR生成方式為系統生成,現在的阿里雲填寫申請後,會自動將DNS解析記錄新增到對應網站的解析設定內,為了防止沒有自動賦值,可以自己看看有沒有驗證成功,未驗證成功就手動新增記錄

開啟我們的域名解析控制檯,我使用的阿里雲DNS,進入DNS管理控制檯

新增你的域名,並且解析DNS到這個域名,這邊已經解析了,就不演示了,解析後開啟解析設定,將證書申請記錄的DNS解析記錄賦值到網站解析設定內

驗證成功提交稽核就好了

下載證書

因為我們使用的是SpringBoot,環境為tomcat所以可以直接下載JKS證書,下載好後,我們會得到2個檔案,一個是證書,另外一個是金鑰

我們將證書檔案丟到resources資原始檔夾同級目錄下

開啟application.yml在裡面進行配置

server:
  port: 443      # 代表443為https
  ssl:
    key-store: classpath:heidaotu.cn.jks    # 驗證檔案地址,這邊是在resources資原始檔夾,所以使用classpath:  如果在其他資料夾使用file:
    key-store-password: 34af27bo9y5         # 金鑰
    key-store-type: JKS                     # 證書型別
    enabled: true                           # 啟動證書,這個是預設啟動,可以不需要填寫

到這裡執行spring boot專案試試吧,在控制檯會顯示http為80埠,https為443埠,我們訪問預設為80埠,如果想要訪問自動為443埠可以建立一個配置檔案,用來自動跳轉到443埠

http自動跳轉到https

這是配置檔案,我們只需要複製貼上直接使用即可,如果你的埠有自定義的話,就只需要更改監聽的埠號和跳轉埠號即可

package com.example.studentspringbootmybatisplus.config;

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

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

    /**
     * http重定向到https
     * @return
     */
    @Bean
    public TomcatServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                constraint.addCollection(collection);
                context.addConstraint(constraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(httpConnector());
        return tomcat;
    }

    @Bean
    public Connector httpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        //Connector監聽的http的埠號
        connector.setPort(80);
        connector.setSecure(false);
        //監聽到http的埠號後轉向到的https的埠號
        connector.setRedirectPort(443);
        return connector;
    }
}

這時我們訪問網站就自動跳轉到https了

如果無法跳轉,可以檢視你的伺服器防火牆埠是否開放443,我曾經碰到個BUG,開放了443埠和80埠還是無法訪問,重啟也沒用,最後重置伺服器,部署過然後才能訪問,果然重灌可以解決99%的BUG