当前位置: 代码网 > it编程>编程语言>Java > Springboot实现TLS双向认证的方法

Springboot实现TLS双向认证的方法

2025年02月09日 Java 我要评论
keytool 是 java 自带的工具,适合与 jks 密钥库和信任库一起使用。一、生成自签名ca证书生成ca密钥对和自签名证书keytool -genkeypair -alias my-ca -k

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:将证书标记为 ca 证书。

导出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"

  • -alias server:服务器证书的别名。
  • -keystore server.jks:生成的服务器密钥库文件。

生成证书签名请求(csr)

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

  • -file server.csr:生成的 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

  • -infile server.csr:输入的 csr 文件。
  • -outfile server.crt:签发的服务器证书文件。
  • -ext san=dns:server.example.com:可选,添加 subject alternative name(san)。

将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"

  • -alias client:客户端证书的别名。
  • -keystore client.jks:生成的客户端密钥库文件。

生成证书签名请求(csr)

keytool -certreq -alias client -keystore client.jks -storepass changeit -file client.csr
  • -file client.csr:生成的 csr 文件。

使用ca签发客户端证书

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:签发的客户端证书文件。

将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
  • -keystore truststore.jks:生成的信任库文件。

五、配置服务器和客户端

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

六、总结

  • 使用 keytool 可以完全替代 openssl,生成和管理自签名 ca 证书、服务器证书和客户端证书。
  • 只需要将 ca 证书添加到信任库(truststore.jks),即可验证所有由该 ca 签发的证书。
  • 这种方法适合 java 生态系统,尤其是使用 jks 密钥库和信任库的场景。

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com