首页 > 编程语言 >java.security.KeyStoreException: problem accessing trust store

java.security.KeyStoreException: problem accessing trust store

时间:2023-03-14 09:55:31浏览次数:47  
标签:accessing java MailSSLSocketFactory sun jdk1.7 KeyStoreException security com

发送邮件,使用了ssl认证,配置了相关代如下:

 

相同的配置在本地能发送邮件,在测试环境发送出现了下面的异常:

 

网上找了一些解决办法,说是把\jre\lib\security下的两个jar包替换了。

但我一对比发现两个环境的jdk版本,发现是不一样的。本地是jdk1.7_79,测试是jdk1.7_281

说实话jdk1.7_281我在Oracle官网没找到这个版本<捂脸>,如果有哪位仁兄找到了,劳烦告知一下。

对比了下这两个版本的jdk,在jdk1.7_281的 \jre\lib\security中并没有所谓的两个jar包,而是出现了一个policy文件夹,里面有俩个文件夹,各自放了对应的jar。

 

 

看到policy文件夹,我就想到了jdk1.8。让我奇怪的是jdk1.7_281这个版本和1.8的配置相差无几,这里我没有多研究。以上叙述并不是解决今天的问题,而是描述问题所在的环境。

我该替换的jar都替换了,但还是没有真正解决邮件发送的问题。因为有时可以发送,有时不可以。比如重启服务之后就可以,但过了一段时间,就嗝屁了,不行了。

这次,我再次研究了下上面的报错信息,翻了翻源码发现一个地方立即引起了我的注意。

 

再来看看上面的异常:

java.security.KeyStoreException: problem accessing trust store
at sun.security.ssl.TrustManagerFactoryImpl.engineInit(TrustManagerFactoryImpl.java:76)
at javax.net.ssl.TrustManagerFactory.init(TrustManagerFactory.java:250)
at com.sun.mail.util.MailSSLSocketFactory$MailTrustManager.<init>(MailSSLSocketFactory.java:333)
at com.sun.mail.util.MailSSLSocketFactory$MailTrustManager.<init>(MailSSLSocketFactory.java:323)
at com.sun.mail.util.MailSSLSocketFactory.<init>(MailSSLSocketFactory.java:115)
at com.sun.mail.util.MailSSLSocketFactory.<init>(MailSSLSocketFactory.java:94)
at com.tit.taf.common.JavaMail.<init>(JavaMail.java:79)

我从JavaMail类一层一层向里看,来到MailSSLSocketFactory类的94行,发现协议使用的是TLS:

 

想到现在使用的协议是TLSv1.2,于是我使用了带协议参数的构造函数,new出一个对象:

 

改完之后,打包部署在测试环境,发送邮箱可以了!

 

标签:accessing,java,MailSSLSocketFactory,sun,jdk1.7,KeyStoreException,security,com
From: https://www.cnblogs.com/zhizhixiaoxia/p/17183525.html

相关文章

  • java操作excel文件——POI
    简述在开发者经常会涉及和excel的交互,如将数据库的数据导出到内存中,如将excel的数据导入到内存中。常用的方式有两种——poi和javaexcel,其中常用的是poiPO......
  • 使用Java替换字符串占位符的几种方法 String url2 = "jdbc:mysql://{0}:{1}/{2}"
    使用Java替换字符串占位符的几种方法https://blog.csdn.net/m0_67402125/article/details/125383655importorg.apache.commons.lang.text.StrSubstitutor;importj......
  • Java FileOutputStream IO 拒绝访问
    很无聊的bug,也是对IO使用不熟悉导致本意是将文件写入这个目录下FileOutputStreamfos=newFileOutputStream("D:/test");然后报拒绝访问的错误,应该这么写FileOut......
  • Java AES 加密解密&& shell 加密解密
    packageemails;importsun.misc.BASE64Decoder;importjavax.crypto.Cipher;importjavax.crypto.spec.SecretKeySpec;importjava.util.Base64;/***AES加......
  • Java 泛型
    泛型类的定义class类名称<泛型标识,泛型标识...>{泛型标识变量名;}常用的泛型标识:TEKV泛型类的使用方法类名<具体的数据类型>对象名=new类名<>();泛型类在创......
  • Java中的自旋锁,手动实现一个自旋锁
    自旋锁CAS是实现自旋锁的基础,CAS利用CPU指令保证了操作的原子性,已达到锁的效果。自旋是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,当线程发现锁被占......
  • Java线程池
    线程池的目的是通过对线程的管理,让多线程程序中的多线程便捷开发、高效运行。线程池的存在的意义让线程变得可重用,减小线程创建和销毁带来的消耗。线程池中保留的可用......
  • java中的注解、自定义注解
    注解注解概述​ 注解类似于一个商品标签,给当前程序的开发者提供信息和标记,给java编译程序员或者jvm提供数据支持和标记,有着代码量少,易读性更高的好处,本质还是一个特殊的......
  • Git 仓库7K stars!学Java开源项目austin要多久?
    我是3y,一年CRUD经验用十年的markdown程序员......
  • Java数组
    Java数组1.数组概述数组的定义数组是相同类型数据的有序集合数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元......