java.security.KeyStoreException: problem accessing trust store
发送邮件,使用了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
相关文章
- 汉诺塔
- 协变和逆变随笔
- 一个bug肝一周...忍不住提了issue
- 对几次通宵加班发版的复盘和思考
- 憋了很久,终于弄懂什么是IOC(控制反转)
- Docker安装flink及避坑指南
- Spark大数据处理框架入门(单机版)
- Springboot项目架构设计
- 从零开始设计一个博客
- 永远考虑那个拥有更强写作能力的程序员
- 那个程序员说一个输入框要做一周
- 懒得写文档,swagger文档导出来不香吗
- 技术更迭,一往无前
- .NET Core 跨平台
- 程序员着装指南
- 码农当自强
- ASP.NET Core Web API中使用Swagger
- 那些曾经顶一个团队的码农去哪里了
- C#面试考点集锦
- 插件式架构实现批量服务寄宿