使用JDK自帶的工具生成證書
- 確保安裝了JDK並正確配置了環境變量;
- 進入你的JAVA_HOME目錄中的bin目錄;
- 在這個目錄下執行
// 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
- 獲取名爲keystore.p12的證書,將其放入
resources
目錄中,並在application.properties
或application.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,則在訪問的時添加具體的端口號
- 將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;
}
}
- 部署
若部署環境爲windows,直接啓動即可;若部署環境是Linux,先開通443端口,在進行部署
# 判斷443端口是否已經開放
firewall-cmd --query-port=443/tcp
# 若未開放,則配置開啓,並重新加載配置
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload
- 以JDK生成證書的方式足夠簡單,但在Chrome和Edge瀏覽器上依舊顯示不安全,因此下面就使用FreeSSL提供的免費證書
使用FreeSSL提供的證書
FreeSSL.cn 是一個免費提供 HTTPS 證書申請、HTTPS 證書管理和 HTTPS 證書到期提醒服務的網站,旨在推進 HTTPS 證書的普及與應用,簡化證書申請的流程。
- 首先你得有一個域名,推薦國外的GoDaddy,價格合適且不需要備案就可以進行解析;
- FreeSSL網站上有對不同品牌的介紹了和證書生成方式的介紹,請參閱網站;
- 一頓操作之後,相信你已經下載證書到本地了,將證書放入
resources
目錄中,並在配置文件中添加配置
#https端口號.
server.port: 443
#證書的路徑.
server.ssl.key-store: classpath:***.jks
#證書密碼,請修改爲您自己證書的密碼.
server.ssl.key-store-password: ***
#祕鑰庫類型
server.ssl.keyStoreType: JKS
- 將http重定向到https,代碼同上
- 打包並部署
- 通過查看日誌,http請求成功重定向到到了https,在Chrome瀏覽器中也標示爲安全網站
Spring Boot版本爲2.0.4.RELEASE