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与 ...
随机推荐
- virtualenv指定使用本地某个版本python
virtualenv -p D:\env\py37_1\Scripts\python3.exe time01 红色的地方是 你本地python解释器的安装路径,后面黄色部分是创建的虚拟环境的名称. 另 ...
- 通过url跳转到页面锚点
在需要跳到的页面加: function GetQueryString(name) { var reg = new RegExp("(^|&)" + name ...
- LP1-5:WEB应用测试技巧
一.静态页面 静态文字 1) 检查一个页面或者一组中多个页面的字体.size.颜色.位置等因素是否符合需求: 2)检查页面文字图标的间距.行距是否统一,对齐方式是否统一: 3)静态文字的含义是否符号需 ...
- 你可能不知道的HTML小技巧 面试题小技巧
程序员面试题库分享 1.前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 2.前端技术导航大全 推荐:★★★★★ 地址:前端技术导航大全 3.开发者颜色 ...
- C++数组(二):二维数组
二维数组 什么是二维数组?二维数组就是在一维数组的基础上增加一个维度. 二维数组的定义方式 数据类型 数组名[行数][列数]; int arr[2][3]; arr[0][0] = 1; arr[0] ...
- redis之五种基本数据类型
五种基本数据类型 redis存储任何类型的数据都是以key-value形式保存,并且所有的key都是字符串,所以讨论基础数据结构都是基于value的数据类型 常见的5种数据类型是:String.Lis ...
- ubuntu 查看已安装软件命令
一.查看所有已安装软件包 dpkg -l 二.过滤安装包 yang@ubuntu:~/ansible$ dpkg -l | grep vim ii vim 2:8.1.2269-1ubuntu5.9 ...
- 错误 : 资产文件“\obj\project.assets.json”没有“.NETCoreApp,Version=v2.0”的目标。确保已运行还原,且“netcoreapp2.0”已包含在项目的 TargetFrameworks 中。
原因是项目升级了目标框架netcoreapp2.1但是发布配置文件上的目标框架配置项没有更改导致发布错误 将此处修改成需要的版本即可.例如:<TargetFramework>netcore ...
- 基于DFA算法实现的敏感词过滤
本文转自浅析敏感词过滤算法(C++),自己也在其基础上根据自己的情况做了一点修改. https://blog.csdn.net/u012755940/article/details/51689401? ...
- pod init 失败
问题: pod init 失败,报错如下: shenheping@shenhepingdeMacBook-Pro-2 iCar % pod init Ignoring ffi-1.13.1 becau ...