对于javamail发送邮件,服务器需要tls验证时只要指定mail.smtp.starttls.enable为true就可以了,
但遇到服务器需要使用CA证书时怎样操作,网上的资料太少了,今天遇到的问题
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
网上能找到的资料说明
官方的QA http://www.oracle.com/technetwork/java/faq-135477.html#installcert
Q: When connecting to my mail server over SSL I get an exception like "unable to find valid certification path to requested target".
A: Your server is probably using a test certificate or self-signed certificate instead of a certificate signed by a commercial Certificate Authority. You'll need to install the server's certificate into your trust store. The InstallCert program will help.
运行 java InstallCert smtp.xyz.com:465
得到jssecacerts文件后复制到jdk1.6.0_14\jre\lib\security目录
-------------------
以上是服务器需要ssl证书验证时的处理办法,但如果你的服务器是tls(STARTTLS)验证需要证书时就不行了。
InstallCert工具不能从服务器上把证书拿下来,那么就需要手工把证书添加到你的security目录了。
一个最简单的办法,随便用个客户端进行连接,下载下来证书后导出为文件。
导入邮箱CA命令:keytool -import -alias cacerts -keystore cacerts -file (证书文件名) -trustcacerts
cacerts文件是本机jre原有的认证文件(默认目录地址:C:\Program Files\Java\jre6\lib\security\)
命令会提示你输入cacerts证书库密码,默认密码为changeit,
然后Y确认即可,认证已添加到keystore。
上述操作后就可以用javamail进行服务器为STARTTLS验证并且需要证书的发信了。