SpringBoot 配置内部tomcat https双向验证
1.在application.properties或者application.yml配置文件中加入
server:
port: 8443
ssl:
key-store: classpath:xxxx.jks
# xxxx.jks的别名
key-alias: transfer
key-store-password: 123456
key-store-type: JKS
enabled: true
# 以下是配置双向验证,如不需要,可以不配置
trust-store: classpath:truststore.jks
trust-store-password: 654321
trust-store-type: JKS
client-auth: need
trust-store-provider: SUN
附上生成jks的一些操作
# 切换到java的jre/lib/security路径 # 生成自签的证书公私钥库jks文件
keytool -genkey -alias test -keyalg RSA -keysize 2048 -keystore test.jks # 从jks文件导出cer
keytool -export -alias test -keystore test.jks -rfc -file test.cer # java添加自签证书的本地信任,不然会抛出错误:unable to find valid certification path to requested target
keytool -import -alias test -keystore cacerts -file test.cer -storepass changeit # 根据别名查看证书
keytool -list -alias test -keystore cacerts -storepass changeit # 根据别名删除证书
keytool -delete -alias test -keystore cacerts -storepass changeit
但是在启动的时候,却一直报错:the trustAnchors parameter must be non-empty
经排查,是trust-store有问题,可以看看解释的文章:
https://blog.csdn.net/HD243608836/article/details/118555240
具体解释代码在JavaKeyStore.class的engineLoad(InputStream var1, char[] var2)方法里
for(int var13 = 0; var13 < var12; ++var13) {
int var14 = var4.readInt();
String var15;
byte[] var23;
if(var14 != 1) {
if(var14 != 2) {
throw new IOException("Unrecognized keystore entry");
}
# 只含有公钥的jks会加载为TrustedCertEntry
JavaKeyStore.TrustedCertEntry var27 = new JavaKeyStore.TrustedCertEntry();
var15 = var4.readUTF();
var27.date = new Date(var4.readLong());
if(var11 == 2) {
String var29 = var4.readUTF();
if(var7.containsKey(var29)) {
var6 = (CertificateFactory)var7.get(var29);
} else {
var6 = CertificateFactory.getInstance(var29);
var7.put(var29, var6);
}
}
var23 = IOUtils.readFully(var4, var4.readInt(), true);
var8 = new ByteArrayInputStream(var23);
var27.cert = var6.generateCertificate(var8);
var8.close();
this.entries.put(var15, var27);
} else {
JavaKeyStore.KeyEntry var16 = new JavaKeyStore.KeyEntry();
var15 = var4.readUTF();
var16.date = new Date(var4.readLong());
var16.protectedPrivKey = IOUtils.readFully(var4, var4.readInt(), true);
int var17 = var4.readInt();
if(var17 > 0) {
ArrayList var18 = new ArrayList(var17 > 10?10:var17);
for(int var19 = 0; var19 < var17; ++var19) {
if(var11 == 2) {
String var20 = var4.readUTF();
if(var7.containsKey(var20)) {
var6 = (CertificateFactory)var7.get(var20);
} else {
var6 = CertificateFactory.getInstance(var20);
var7.put(var20, var6);
}
}
var23 = IOUtils.readFully(var4, var4.readInt(), true);
var8 = new ByteArrayInputStream(var23);
var18.add(var6.generateCertificate(var8));
var8.close();
}
var16.chain = (Certificate[])var18.toArray(new Certificate[var17]);
}
this.entries.put(var15, var16);
}
}
总体来说,就是trust-store只需要包含公钥的信息,而之前配置的JKS文件同时含有公私钥的信息而导致出错,如下文章讲述了如何生成只有公钥的jks:
http://t.zoukankan.com/Amos-Turing-p-7111499.html
SpringBoot 配置内部tomcat https双向验证的更多相关文章
- Https双向验证与Springboot整合测试-人来人往我只认你
1 简介 不知不觉Https相关的文章已经写了6篇了,本文将是这个专题的最后一篇,起码近期是最后一篇.前面6篇讲的全都是单向的Https验证,本文将重点介绍一下双向验证.有兴趣的同学可以了解一下之前的 ...
- nginx配置https双向验证(ca机构证书+自签证书)
nginx配置https双向验证 服务端验证(ca机构证书) 客户端验证(服务器自签证书) 本文用的阿里云签发的免费证书实验,下载nginx安装ssl,文件夹有两个文件 这两个文件用于做服务器http ...
- linux:Nginx+https双向验证(数字安全证书)
本文由邓亚运提供 Nginx+https双向验证 说明: 要想实现nginx的https,nginx必须启用http_ssl模块:在编译时加上--with-http_ssl_module参数就ok.另 ...
- Java Https双向验证
CA: Certificate Authority,证书颁发机构 CA证书:证书颁发机构颁发的数字证书 参考资料 CA证书和TLS介绍 HTTPS原理和CA证书申请(满满的干货) 单向 / 双向认证 ...
- Springboot配置ssl使用https
SSL(Secure Sockets Layer 安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密,SSL协议位于TCP/IP协议与各种应用层协议之间, ...
- springboot使用内部tomcat启动和外部tomcat启动的区别
springboot本身提供了内部tomcat,可以使用main方法直接启动即可,此时在访问项目请求时,不需要加上项目名称.例如:http://localhost:8088/user/ 如果使用外部t ...
- .net core https 双向验证
文章来自:https://www.cnblogs.com/axzxs2001/p/10070562.html 关于https双向认证的知识可先行google,这时矸接代码. 为了双向认证,我们首先得准 ...
- ssl/https双向验证的配置
1.SSL认证 不需要特别配置,相关证书库生成看https认证中的相关部分 2.HTTPS认证 一.基本概念 1.单向认证,就是传输的数据加密过了,但是不会校验客户端的来源 2.双向认证,如果客户端 ...
- ssl https双向验证的配置与证书库的生成
1.SSL认证 不须要特别配置,相关证书库生成看https认证中的相关部分 2.HTTPS认证 一.基本概念 1.单向认证,就是传输的数据加密过了,可是不会校验client的来源 2.双向认证,假设 ...
- Springboot 配置 ssl 实现HTTPS 请求 & Tomcat配置SSL支持https请求
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议.TLS与 ...
随机推荐
- js类型以及存储方式
一.js内置类型 基础类型:String, number, null, undefine, boolean, symbol, bigint 引用类型:Object(包含普通对象Object,数组对象A ...
- 如何使用visual studio code的插件remote ssh远程操作virtual box虚拟机
0 Remote-SSH是什么?为什么要用它? The Remote-SSH extension lets you use any remote machine with a SSH server a ...
- .net core 3.1项目运行在Windows server 2012R2服务器上,Decimal类型小数点不见了,求解!32112.7958
.net core 3.1项目运行在Windows server 2012R2服务器上,Decimal类型小数点不见了,求解! string str = "1002910.8241" ...
- 报错信息;Cannot execute request on any known server 解决;sprigcloud;跑本地但是服务一直在eureka
配置文件加上: eureka.client.register-with-eureka=falseeureka.client.fetch-registry=false
- jinkens设置工作主目录
linux下,默认jenkins的主目录,位于当前用户下的.jenkins目录,需要自定义该目录位置的时候,可以通过设定环境变量 JENKINS_HOME 然后重启jenkins nohup java ...
- Keil5 STM32 C++开发 ARM V6编译器的使用教程
Keil5更新之后,开始支持ARM V6编译器,新版本的编译器对C++有了更多的支持,在编译方面也做了很多的改善,具体的没有详细了解,本文只是对STM32 开发下,使用V6版本的编译器进行STM32的 ...
- FCOS网络(free anchor)
FCOS FCOS网络解析 FPN输出多个特征图,然后如何处理这些特征图? [问题]"特征图相对原图的步距是s"是个什么东西
- 23_webpack_TreeShaking
什么是TreeShaking TreeShaking,是一个术语,表示消除死代码(dead_code) JS的Tree Shaking 对JS进行TreeShaking是源自打包工具rollup这是因 ...
- ES关闭打开索引
转载: https://mp.weixin.qq.com/s?__biz=MzAxMjY5NDU2Ng==&mid=2651862931&idx=1&sn=5834af8065 ...
- MyBatis_09(逆向工程)
MyBatis的逆向工程 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表.Hibernate是支持正向工程的 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: J ...