java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Springboot TLS双向认证

Springboot实现TLS双向认证的方法

作者:圆圆同学

本文介绍了使用keytool生成和管理自签名CA证书、服务器证书和客户端证书的方法,适合Java生态系统,通过配置信任库和服务器/客户端配置,实现了Spring Boot中的TLS双向认证,感兴趣的朋友一起看看吧

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

导出CA证书

keytool -exportcert -alias my-ca -keystore ca.jks -storepass changeit -file ca.crt

-file ca.crt:导出的 CA 证书文件。

二、使用CA签发服务器证书

生成服务器密钥对

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"

生成证书签名请求(CSR)

keytool -certreq -alias server -keystore server.jks -storepass changeit -file server.csr

使用CA签发服务器证书

keytool -gencert -alias my-ca -infile server.csr -outfile server.crt -keystore ca.jks -storepass changeit -validity 365 -ext SAN=dns:server.example.com

将CA证书和服务器证书导入服务器密钥库

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

先导入 CA 证书,再导入签发的服务器证书。

三、使用CA签发客户端证书

生成客户端密钥对

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"

生成证书签名请求(CSR)

keytool -certreq -alias client -keystore client.jks -storepass changeit -file client.csr

使用CA签发客户端证书

keytool -gencert -alias my-ca -infile client.csr -outfile client.crt -keystore ca.jks -storepass changeit -validity 365

将CA证书和客户端证书导入客户端密钥库

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

先导入 CA 证书,再导入签发的客户端证书。

四、配置信任库

创建信任库并导入CA证书

keytool -importcert -alias my-ca -file ca.crt -keystore truststore.jks -storepass changeit -noprompt

五、配置服务器和客户端

1. 服务器配置

在 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();

六、总结

到此这篇关于Springboot实现TLS双向认证的文章就介绍到这了,更多相关Springboot TLS双向认证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文