Springboot实现TLS双向认证

keytool 是 Java 自带的工具,适合与 JKS 密钥库和信任库一起使用。


一、生成自签名CA证书

  1. 生成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 证书。
  2. 导出CA证书

    keytool -exportcert -alias my-ca -keystore ca.jks -storepass changeit -file ca.crt
    
    • -file ca.crt:导出的 CA 证书文件。

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

  1. 生成服务器密钥对

    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:生成的服务器密钥库文件。
  2. 生成证书签名请求(CSR)

    keytool -certreq -alias server -keystore server.jks -storepass changeit -file server.csr
    
    • -file server.csr:生成的 CSR 文件。
  3. 使用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)。
  4. 将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签发客户端证书

  1. 生成客户端密钥对

    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:生成的客户端密钥库文件。
  2. 生成证书签名请求(CSR)

    keytool -certreq -alias client -keystore client.jks -storepass changeit -file client.csr
    
    • -file client.csr:生成的 CSR 文件。
  3. 使用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:签发的客户端证书文件。
  4. 将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 证书,再导入签发的客户端证书。

四、配置信任库

  1. 创建信任库并导入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.jkskey-store-password: changeitkey-alias: servertrust-store: classpath:truststore.jkstrust-store-password: changeitclient-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 密钥库和信任库的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14259.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全排列问题(LeetCode 46 47)

1 全排列问题 本篇文章主要介绍了全排列问题以及详细的解法。 给定一个数组求出其中的全排列。 其中的数组,可能带重复元素,也可能不带重复元素。 有详细思路以及递归树图解,语言包括C、Java和Go。 下面先来看看简单的版本,不带…

11.PPT:世界动物日【25】

目录 NO12​ NO34 NO56​ NO789视频音频​ NO10/11/12​ NO12 设计→幻灯片大小→ →全屏显示(16:9)确定调整标题占位符置于图片右侧:内容占位符与标题占位符左对齐单击右键“世界动物日1”→复制版式→大小→对齐 幻灯片大小…

【漫话机器学习系列】083.安斯库姆四重奏(Anscombe‘s Quartet)

安斯库姆四重奏(Anscombes Quartet) 1. 什么是安斯库姆四重奏? 安斯库姆四重奏(Anscombes Quartet)是一组由统计学家弗朗西斯安斯库姆(Francis Anscombe) 在 1973 年 提出的 四组数据集。它们…

Postman接口测试:全局变量/接口关联/加密/解密

全局变量和环境变量 全局变量:在postman全局生效的变量,全局唯一 环境变量:在特定环境下生效的变量,本环境内唯一 设置: 全局变量: pm.globals.set("variable_key", "variable_value1&q…

ZZNUOJ(C/C++)基础练习1081——1090(详解版)

目录 1081 : n个数求和 (多实例测试) C C 1082 : 敲7(多实例测试) C C 1083 : 数值统计(多实例测试) C C 1084 : 计算两点间的距离(多实例测试) C C 1085 : 求奇数的乘积(多实例测试…

STM32的HAL库开发---高级定时器

一、高级定时器简介 1、STM32F103有两个高级定时器,分别是TIM1和TIM8。 2、主要特性 16位递增、递减、中心对齐计数器(计数值:0~65535)16位预分频器(分频系数:1~65536)可用于触发DAC、ADC在更新事件、触发事件、输入捕获、输出比较时,会产生中断/DMA请…

数据库系统架构与DBMS功能探微:现代信息时代数据管理的关键

欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭~ ??? 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。?? 希望在这里,我们能一起探…

优惠券平台(一):基于责任链模式创建优惠券模板

前景概要 系统的主要实现是优惠券的相关业务,所以对于用户管理的实现我们简单用拦截器在触发接口前创建一个单一用户。 // 用户属于非核心功能,这里先通过模拟的形式代替。后续如果需要后管展示,会重构该代码 UserInfoDTO userInfoDTO new…

搭建集成开发环境PyCharm

1.下载安装Python(建议下载并安装3.9.x) https://www.python.org/downloads/windows/ 要注意勾选“Add Python 3.9 to PATH”复选框,表示将Python的路径增加到环境变量中 2.安装集成开发环境Pycharm http://www.jetbrains.com/pycharm/…

模板的进阶

非类型模板参数 模板参数分类类型形参与非类型形参 。 类型形参即:出现在模板参数列表中,跟在 class 或者 typename 之类的参数类型名称 。 非类型形参,就是用一个常量作为类 ( 函数 ) 模板的一个参数,在类 ( 函数 ) 模板中可将…

windows安装linux子系统【ubuntu】操作步骤

1.在windows系统中开启【适用于Linux的Windows子系统】 控制面板—程序—程序和功能—启用或关闭Windows功能—勾选适用于Linux的Windows子系统–确定 2.下载安装Linux Ubuntu 22.04.5 LTS系统 Ununtu下载链接 3.安装完Ununtu系统后更新系统 sudo apt update4.进入/usr/l…

【大数据技术】搭建完全分布式高可用大数据集群(Kafka)

搭建完全分布式高可用大数据集群(Kafka) kafka_2.13-3.9.0.tgz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群 Kafka 的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/software目录下,软件安装至/opt目录下。 安…

万字详解 MySQL MGR 高可用集群搭建

文章目录 1、MGR 前置介绍 1.1、什么是 MGR1.2、MGR 优点1.3、MGR 缺点1.4、MGR 适用场景 2、MySQL MGR 搭建流程 2.1、环境准备2.2、搭建流程 2.2.1、配置系统环境2.2.2、安装 MySQL2.2.3、配置启动 MySQL2.2.4、修改密码、设置主从同步2.2.5、安装 MGR 插件 3、MySQL MGR 故…

Linux高级IO

文章目录 🥥IO的基本概念🍇钓鱼五人组🍈五种IO模型🍉高级IO重要概念同步通信 VS 异步通信阻塞 VS 非阻塞 🍊其他高级IO🍋阻塞IO🍋‍🟩非阻塞IO 🥥IO的基本概念 什么是IO…

摄像头模块烟火检测

工作原理 基于图像处理技术:分析视频图像中像素的颜色、纹理、形状等特征。火焰通常具有独特的颜色特征,如红色、橙色等,且边缘呈现不规则形状,还会有闪烁、跳动等动态特征;烟雾则表现为模糊、无固定形状,…

4.3 线性回归的改进-岭回归/4.4分类算法-逻辑回归与二分类/ 4.5 模型保存和加载

4.3.1 带有L2正则化的线性回归-岭回归 岭回归,其实也是一种线性回归,只不过在算法建立回归方程的时候1,加上正则化的限制,从而达到解决过拟合的效果 4.3.1.1 API 4.3.1.2 观察正则化程度的变化,对结果的影响 正则化力…

CSS outline详解:轮廓属性的详细介绍

什么是outline? outline(轮廓)是CSS中一个有趣的属性,它在元素边框(border)的外围绘制一条线。与border不同的是,outline不占用空间,不会影响元素的尺寸和位置。这个特性使它在某些…

设计模式.

设计模式 一、介绍二、六大原则1、单一职责原则(Single Responsibility Principle, SRP)2、开闭原则(Open-Closed Principle, OCP)3、里氏替换原则(Liskov Substitution Principle, LSP)4、接口隔离原则&am…

硬件工程师思考笔记02-器件的隐秘角落:磁珠与电阻噪声

目录 引言 一、磁珠:你以为的“噪声克星”,可能是高频杀手 1. 磁珠的阻抗特性与误区 2. 案例:磁珠引发的5G射频误码率飙升 二、电阻:静默的噪声制造者 1. 电阻噪声的两种形态 2. 案例:ADC精度被电阻噪声“偷走” 三、设…

mysql 不是内部或外部命令,也不是可运行的程序或批处理文件

mysql 不是内部或外部命令,也不是可运行的程序或批处理文件 前言描述1、🌱环境变量配置(高级系统设置):2、🌱环境变量配置(系统属性):3、🌱环境变量配置&…