首页 > 其他分享 >SpringBoot 配置内部tomcat https双向验证

SpringBoot 配置内部tomcat https双向验证

时间:2022-10-25 15:26:43浏览次数:79  
标签:var4 var6 SpringBoot tomcat jks https test new store

  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

 

标签:var4,var6,SpringBoot,tomcat,jks,https,test,new,store
From: https://www.cnblogs.com/zgz21/p/16824929.html

相关文章

  • Springboot 一行代码实现文件上传 20个平台!少写代码到极致
    大家好,我是小富~技术交流,公众号:程序员小富又是做好人好事的一天,有个小可爱私下问我有没有好用的springboot文件上传工具,这不巧了嘛,正好我私藏了一个好东西,顺便给小伙伴......
  • SpringBoot(五)SpringBoot拦截器
    1.继承HandlerInterceptorAdapter,实现preHandle前置处理器,returntrue则进行后续处理,实现postHandle,afterCompletion后置处理。2.实现WebMvcConfigurer,SpringBoot2......
  • 记一次springboot项目自定义HandlerMethodArgumentResolver不生效原因与解法
    前言本文素材的来源自业务部门技术负责人一次代码走查引发的故事,技术负责人在某次走查成员的代码时,发现他们的业务控制层大量充斥着如下的代码@PostMapping("add")p......
  • 使用docker部署nginx并配置https
     使用docker部署nginx并配置https 我只有一台服务器,但我想在这台服务器上运行多个项目,怎么办?总不能靠加端口区分吧?百度和Google是个好东西,于是我找到了答案,使用ng......
  • Springboot数据库的配置问题
    mysql时区问题先前的代码如下spring:datasource:url:jdbc:mysql://localhost:3306/testusername:rootpassword:110120driver-class-name:com......
  • springboot整合elasticsearch实现MySQL模糊查询
    es关联mysql实现模糊查询的数据流:   1、使用logstash同步mysql数据到eslogstash简介及基本操作:https://blog.csdn.net/yurun_house/article/details/109025588win......
  • SpringBoot代理图片、文件等路径
    在config文件夹下新增一个配置类即可 /***@authorcyl*@time2022/10/24*/@ConfigurationpublicclassMyWebAppConfigurationextendsWebMvcConfigurerAda......
  • nginx配置转发https域名到另一个域名上
    server{listen443ssl;server_namewww.test.com;ssl_protocolsTLSv1.2TLSv1.1TLSv1;ssl_ciphersECDHE-RSA-AES128-GCM-SHA256:ECDH......
  • 对称加密、非对称加密 与 HTTPS
    一、对称加密(SymmetricCryptography)对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secretkey)。对称加密有很多种算法,由于它效......
  • springboot~redis-cluster动态感应的配置
    redis-cluster是一个高可用,可分片的分布式redis集群解决方案,建议使用springboot2.3及以上版本的脚手架,如果是<2.3版本,你需要手动添加LettuceConnectionFactory来实现因为服......