Springboot實現(xiàn)TLS雙向認(rèn)證的方法
keytool
是 Java 自帶的工具,適合與 JKS 密鑰庫和信任庫一起使用。
一、生成自簽名CA證書
生成CA密鑰對和自簽名證書
keytool -genkeypair -alias my-ca -keyalg RSA -keysize 2048 -validity 3650 -keystore ca.jks -storepass changeit -keypass changeit -dname "CN=My CA, OU=My Organization, O=My Company, L=My City, ST=My State, C=US" -ext bc:c
-alias my-ca
:CA 證書的別名。-keystore ca.jks
:生成的密鑰庫文件(包含CA密鑰對和證書)。-storepass
和-keypass
:密鑰庫和密鑰的密碼。-dname
:證書的 Distinguished Name(DN)。-ext bc:c
:將證書標(biāo)記為 CA 證書。
導(dǎo)出CA證書
keytool -exportcert -alias my-ca -keystore ca.jks -storepass changeit -file ca.crt
-file ca.crt
:導(dǎo)出的 CA 證書文件。
二、使用CA簽發(fā)服務(wù)器證書
生成服務(wù)器密鑰對
keytool -genkeypair -alias server -keyalg RSA -keysize 2048 -validity 365 -keystore server.jks -storepass changeit -keypass changeit -dname "CN=server.example.com, OU=My Organization, O=My Company, L=My City, ST=My State, C=US"
-alias server
:服務(wù)器證書的別名。-keystore server.jks
:生成的服務(wù)器密鑰庫文件。
生成證書簽名請求(CSR)
keytool -certreq -alias server -keystore server.jks -storepass changeit -file server.csr
-file server.csr
:生成的 CSR 文件。
使用CA簽發(fā)服務(wù)器證書
keytool -gencert -alias my-ca -infile server.csr -outfile server.crt -keystore ca.jks -storepass changeit -validity 365 -ext SAN=dns:server.example.com
-infile server.csr
:輸入的 CSR 文件。-outfile server.crt
:簽發(fā)的服務(wù)器證書文件。-ext SAN=dns:server.example.com
:可選,添加 Subject Alternative Name(SAN)。
將CA證書和服務(wù)器證書導(dǎo)入服務(wù)器密鑰庫
keytool -importcert -alias my-ca -file ca.crt -keystore server.jks -storepass changeit -noprompt keytool -importcert -alias server -file server.crt -keystore server.jks -storepass changeit
先導(dǎo)入 CA 證書,再導(dǎo)入簽發(fā)的服務(wù)器證書。
三、使用CA簽發(fā)客戶端證書
生成客戶端密鑰對
keytool -genkeypair -alias client -keyalg RSA -keysize 2048 -validity 365 -keystore client.jks -storepass changeit -keypass changeit -dname "CN=client.example.com, OU=My Organization, O=My Company, L=My City, ST=My State, C=US"
-alias client
:客戶端證書的別名。-keystore client.jks
:生成的客戶端密鑰庫文件。
生成證書簽名請求(CSR)
keytool -certreq -alias client -keystore client.jks -storepass changeit -file client.csr
-file client.csr
:生成的 CSR 文件。
使用CA簽發(fā)客戶端證書
keytool -gencert -alias my-ca -infile client.csr -outfile client.crt -keystore ca.jks -storepass changeit -validity 365
-infile client.csr
:輸入的 CSR 文件。-outfile client.crt
:簽發(fā)的客戶端證書文件。
將CA證書和客戶端證書導(dǎo)入客戶端密鑰庫
keytool -importcert -alias my-ca -file ca.crt -keystore client.jks -storepass changeit -noprompt keytool -importcert -alias client -file client.crt -keystore client.jks -storepass changeit
先導(dǎo)入 CA 證書,再導(dǎo)入簽發(fā)的客戶端證書。
四、配置信任庫
創(chuàng)建信任庫并導(dǎo)入CA證書
keytool -importcert -alias my-ca -file ca.crt -keystore truststore.jks -storepass changeit -noprompt
-keystore truststore.jks
:生成的信任庫文件。
五、配置服務(wù)器和客戶端
1. 服務(wù)器配置
在 Spring Boot 中配置:
server: ssl: key-store: classpath:server.jks key-store-password: changeit key-alias: server trust-store: classpath:truststore.jks trust-store-password: changeit client-auth: need # 要求客戶端提供證書
2. 客戶端配置
在 Java 中配置:
SSLContext sslContext = SSLContextBuilder.create() .loadKeyMaterial(Paths.get("client.jks"), "changeit".toCharArray(), "changeit".toCharArray()) .loadTrustMaterial(Paths.get("truststore.jks"), "changeit".toCharArray()) .build(); HttpClient client = HttpClients.custom() .setSSLContext(sslContext) .build();
六、總結(jié)
- 使用
keytool
可以完全替代openssl
,生成和管理自簽名 CA 證書、服務(wù)器證書和客戶端證書。 - 只需要將 CA 證書添加到信任庫(
truststore.jks
),即可驗證所有由該 CA 簽發(fā)的證書。 - 這種方法適合 Java 生態(tài)系統(tǒng),尤其是使用 JKS 密鑰庫和信任庫的場景。
到此這篇關(guān)于Springboot實現(xiàn)TLS雙向認(rèn)證的文章就介紹到這了,更多相關(guān)Springboot TLS雙向認(rèn)證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Java中PriorityQueue的作用和源碼實現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Java中阻塞隊列PriorityQueue的作用和源碼實現(xiàn)的相關(guān)知識,文中的示例代碼講解詳細(xì),需要的小伙伴可以了解下2024-02-02基于Jenkins搭建.NET FrameWork持續(xù)集成環(huán)境
這篇文章主要介紹了基于Jenkins搭建.NET FrameWork持續(xù)集成環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08手?jǐn)]一個 spring-boot-starter的全過程
這篇文章主要介紹了手?jǐn)]一個 spring-boot-starter的全過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01Spring Cloud動態(tài)配置刷新RefreshScope使用示例詳解
這篇文章主要為大家介紹了Spring Cloud動態(tài)配置刷新RefreshScope使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08