1、通過JDK中keytool工具生成證書
前提是電腦安裝了JDK并配置了環(huán)境變量,打開CMD,并輸入
keytool -genkey -alias tomcat -keyalg RSA -keystore ./server.keystore
密碼和證書內(nèi)容根據(jù)自己情況可以自定義(我設(shè)置的密碼是:dev123),如圖所示:
以上操作后即生成證書,證書位置在cmd的路徑位置,一般在路徑C:\Users\Administrator\server.keystore
2、將證書放入到springboot項(xiàng)目內(nèi)
將 文件 server.keystore 復(fù)制到 Springboot項(xiàng)目resources文件夾下,如圖所示:
?
3、配置application.yml文件
打開application.yml配置文件,添加server相關(guān)的ssl配置,如下代碼:
server:
port: 8080
ssl:
protocol: TLS
key-store: classpath:server.keystore
key-alias: tomcat
enabled: true
key-store-password: dev123
key-store-type: JKS
此時(shí)啟動(dòng)springboot項(xiàng)目,已經(jīng)可以訪問https://localhost:8080地址了,但是http請(qǐng)求現(xiàn)在是無法訪問的。
4、添加配置類允許http訪問
單用上面的配置即可支持https,我們還想支持http訪問自動(dòng)定向到https可以添加如下代碼:
先在application.yml配置文件中添加 httpPort: 8888
server:
port: 8080
httpPort: 8888
ssl:
protocol: TLS
key-store: classpath:server.keystore
key-alias: tomcat
enabled: true
key-store-password: dev123
key-store-type: JKS
然后新建HttpsConfig類,
package com.lyf.demo01.config;
import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author lxh
* @Decription 配置同時(shí)支持 HTTP 與 HTTPS 訪問
* @date 2023/8/2 10:33
**/
@Configuration
public class HttpsConfig {
@Value("${server.httpPort}")
private Integer httpPort;
@Bean
public ServletWebServerFactory serverFactory() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(createStandardConnector());
return tomcat;
}
/**
* 配置http
* @return
*/
private Connector createStandardConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(httpPort);
return connector;
}
}
注意:上面代碼中TomcatServletWebServerFactory 這個(gè)類是springboot 2.0.x中的。
5、測試http和https訪問
再次運(yùn)行項(xiàng)目,即可訪問https://localhost:8080/和http://localhost:8888/。
至此實(shí)現(xiàn)springboot項(xiàng)目既支持http訪問又支持https請(qǐng)求。
拓展:keytool知識(shí)
keytool為java原生自帶,安裝java后不需要再進(jìn)行安裝,作為密鑰和證書管理工具,方便用戶能夠管理自己的公鑰/私鑰及證書,用于認(rèn)證服務(wù)。
1. 相關(guān)概念
keystore
keytool將密鑰(key)和證書(certificates)存儲(chǔ)在keystore文件中,
密鑰需要存儲(chǔ)在密鑰庫中
2. 相關(guān)命令
-alias 產(chǎn)生別名
-keystore 指定密鑰庫的名稱(就像數(shù)據(jù)庫一樣的證書庫,可以有很多個(gè)證書,cacerts這個(gè)文件是jre自帶的,你也可以使用其它文件名字,如果沒有這個(gè)文件名字,它會(huì)創(chuàng)建這樣一個(gè))
-storepass 指定密鑰庫的密碼
-keypass 指定別名條目的密碼
-list 顯示密鑰庫中的證書信息
-v 顯示密鑰庫中的證書詳細(xì)信息
-export 將別名指定的證書導(dǎo)出到文件
-file 參數(shù)指定導(dǎo)出到文件的文件名
-delete 刪除密鑰庫中某條目
-import 將已簽名數(shù)字證書導(dǎo)入密鑰庫
-keypasswd 修改密鑰庫中指定條目口令
-dname 指定證書擁有者信息
-keyalg 指定密鑰的算法
-validity 指定創(chuàng)建的證書有效期多少天
-keysize 指定密鑰長度
3. 生成秘鑰庫
生成密鑰庫的同時(shí)生成一個(gè)密鑰對(duì),并且密鑰庫和密鑰對(duì)都是需要密碼的
keytool -genkey -keystore "/Users/..../tmp/keytool/test.keystore" -alias mytest -keyalg RSA -validity 365
4. 查看證書
keytool -list -v -keystore test.keystore -storepass 123456
5. 導(dǎo)入證書
keytool -import -alias test1 -file ./test.crt -keystore ./test.keystore -storepass 789789
6. 導(dǎo)出證書
keytool -export -alias mytest -keystore ./test.keystore -file ./test.crt -storepass 789789
7.修改密碼
修改密鑰庫中指定條目的密碼文章來源:http://www.zghlxwxcb.cn/news/detail-856201.html
keytool -keypasswd -alias 需修改的別名 -keypass 舊密碼 -new 新密碼 -storepass keystore密碼 -keystore 所在的密鑰庫
修改密鑰庫的密碼文章來源地址http://www.zghlxwxcb.cn/news/detail-856201.html
keytool -storepasswd -keystore ./yushan.keystore(需修改口令的keystore) -storepass 123456(原始密碼) -new yushan(新密碼)
到了這里,關(guān)于springboot項(xiàng)目同時(shí)支持http和https訪問的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!