Spring Boot兩種方式配置Https

使用JDK自帶的工具生成證書

  1. 確保安裝了JDK並正確配置了環境變量;
  2. 進入你的JAVA_HOME目錄中的bin目錄;
  3. 在這個目錄下執行
//  keytool -genkey -alias (別名) -dname "CN=(姓名),OU=(組織單位名稱),O=(組織名稱),L=(城市名稱),ST=(省),C=(國家)" -storetype (密鑰倉庫類型) -keyalg (生證書的算法名稱) -keysize (密鑰長度,證書大小) -keystore (指定生成證書的位置和證書名稱) -validity (證書有效期,天單位)
	keytool -genkey -alias uublog -dname "CN=Lhc,OU=SCYD,O=SCYD,L=CD,ST=SiChuan,C=CN" -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365
  1. 獲取名爲keystore.p12的證書,將其放入resources目錄中,並在application.propertiesapplication.yml中配置
#https端口號.
server.port: 443
#證書的路徑.
server.ssl.key-store: classpath:keystore.p12
#證書密碼,請修改爲您自己證書的密碼.
server.ssl.key-store-password: 123456
#祕鑰庫類型
server.ssl.keyStoreType: PKCS12 
#證書別名
#server.ssl.keyAlias: uublog

若指定的端口非443,則在訪問的時添加具體的端口號

  1. 將http重定向到https
package com.lhc.uublog.utils;

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;

/**
 * @ProjectName: uublog
 * @Package: com.lhc.uublog.utils
 * @ClassName: SSLUtils
 * @Author: lhc
 * @Description: Http重定向到Https
 * @Date: 2019/4/25 下午 8:35
 */
@Configuration
public class SSLUtils {

    @Bean
    public Connector connector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setSecure(false);
        connector.setPort(80);
        connector.setRedirectPort(443);
        return connector;
    }

    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector) {
        TomcatServletWebServerFactory webServerFactory = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection securityCollection = new SecurityCollection();
                securityCollection.addPattern("/*");
                securityConstraint.addCollection(securityCollection);
                context.addConstraint(securityConstraint);
            }
        };
        webServerFactory.addAdditionalTomcatConnectors(connector);
        return webServerFactory;
    }
}
  1. 部署

若部署環境爲windows,直接啓動即可;若部署環境是Linux,先開通443端口,在進行部署

# 判斷443端口是否已經開放
firewall-cmd --query-port=443/tcp
# 若未開放,則配置開啓,並重新加載配置
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload 
  1. 以JDK生成證書的方式足夠簡單,但在Chrome和Edge瀏覽器上依舊顯示不安全,因此下面就使用FreeSSL提供的免費證書
    在這裏插入圖片描述
    在這裏插入圖片描述

使用FreeSSL提供的證書

FreeSSL.cn 是一個免費提供 HTTPS 證書申請、HTTPS 證書管理和 HTTPS 證書到期提醒服務的網站,旨在推進 HTTPS 證書的普及與應用,簡化證書申請的流程。

  1. 首先你得有一個域名,推薦國外的GoDaddy,價格合適且不需要備案就可以進行解析;
    在這裏插入圖片描述
    在這裏插入圖片描述
  2. FreeSSL網站上有對不同品牌的介紹了和證書生成方式的介紹,請參閱網站;
  3. 一頓操作之後,相信你已經下載證書到本地了,將證書放入resources目錄中,並在配置文件中添加配置
#https端口號.
server.port: 443
#證書的路徑.
server.ssl.key-store: classpath:***.jks
#證書密碼,請修改爲您自己證書的密碼.
server.ssl.key-store-password: ***
#祕鑰庫類型
server.ssl.keyStoreType: JKS
  1. 將http重定向到https,代碼同上
  2. 打包並部署
    在這裏插入圖片描述
    在這裏插入圖片描述
  3. 通過查看日誌,http請求成功重定向到到了https,在Chrome瀏覽器中也標示爲安全網站

Spring Boot版本爲2.0.4.RELEASE

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