zl程序教程

您现在的位置是:首页 >  其他

当前栏目

java.security.KeyStoreException: problem accessing trust store

2023-04-18 15:44:10 时间

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

 

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

 

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

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

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

对比了下这两个版本的jdk,在jdk1.7_281的 jrelibsecurity中并没有所谓的两个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出一个对象:

 

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

如还有问题,请看鄙人的另一篇:

https://www.cnblogs.com/zhizhixiaoxia/p/17125973.html