访问Gmail(或安全网站)而未获取PKIX证书路径错误
通过gmail发送电子邮件导致获取PKIX证书路径错误。这同样适用于从Tomcat发送电子邮件。访问Gmail(或安全网站)而未获取PKIX证书路径错误
解决问题后,我希望你觉得这篇文章有用。这篇文章为您提供了针对这些错误的逐步诊断。
第1步:我试图用this post和another post来解决这个问题,但是这并没有帮助我。在大多数情况下,这将是足够的。您可以使用keytool通过'keytool -list -keystore'列出证书'%JAVA_HOME%/ jre/lib/security/cacerts''
我通过单击gmail URL的锁定图标并导出/将证书导入到我使用过的JDK版本的cacert文件中。我可以看到keytool -list证书已被添加。这个过程在(链接)帖子中有很好的描述。
步骤2A:我使用的是正确的信任库吗?我添加了JVM参数来指导证书搜索,如-Djavax.net.ssl.trustStore =“..../jre/lib/security/cacerts” -Djavax.net.ssl.trustStorePassword =“changeit”。
步骤2B:当我将cacerts文件的值更改为cacertsXYZ时,出现错误。所以,这证明了'cacert'被使用了。
Caused by: javax.mail.MessagingException: Can't send command to SMTP host; nested exception is: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
步骤2C:当时这也为我的Tomcat Web服务器的情况下?我证实在我的JRE_HOME的cacerts中证书在那里。在Tomcat中,我的JRE_HOME是“C:\ Program Files \ Java \ jdk1.8.0_144 \ jre”。我的JAVA_HOME = C:\ Program Files \ Java \ jdk1.8.0_144。
步骤3:我有可公开获得的“SSLPoke” Java类,想看看我是否能与谷歌和或smtp.gmail.com连接。结果是在上市:我可以通过端口443
try { SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
// **Fail** TLS - SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("smtp.gmail.com", 587);
// **Fail** SSL - SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("smtp.gmail.com", 465);
// **OK**
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("google.com", 443);
// OK
SSLSocket sslsocket2 = (SSLSocket) sslsocketfactory.createSocket("mail.google.com", 443);
InputStream in = sslsocket.getInputStream();
OutputStream out = sslsocket.getOutputStream();
out.write(1); // write test byte to get reaction.
while (in.available() > 0) {
System.out.print(in.read());
}
System.out.println("Successfully connected");
} catch (Exception exception) {
exception.printStackTrace();
}
步骤4使用SSL连接到google.com和mail.google.com:可信存储可能被损坏?我安装了更新版本的JDK1.8 v152。我没有任何成功地重新启动应用程序。这是否与JDK和JRE的区别?只有JRE具有lib \ security \ cacerts文件。我尝试了SSL(465)和TLS(587)端口。不。
步骤5:运行OpenSSL的(带的s_client.First -connect smtp.gmail.com:587 -starttls SMTP)显示,我的病毒扫描(停住)被禁止安全邮件的发送。所以,暂时我禁用了这个电子邮件屏蔽。这给了以下错误:
java.lang.RuntimeException: javax.mail.AuthenticationFailedException
步骤6:释放virusscanner网盾,使用openssl后给了以下错误:CN =谷歌互联网管理局G3校验错误:NUM = 20:无法获取本地发行人证书。
OpenSSL> s_client -connect smtp.gmail.com:587 -starttls smtp CONNECTED(00000280) depth=1 C = US, O = Google Trust Services, CN = Google Internet Authority G3 verify error:num=20:unable to get local issuer certificate ....
允许的Gmail帐户从弱认证应用accessable“,在你的谷歌账户的设置,即最终在正确发送电子邮件产生。这是链接到security settings of your Google account。
步骤7:从其他服务器发送电子邮件可能是一个问题。认证错误(仍然)是结果。要解决这些错误,您可以执行以下操作:
- 检查两步验证是否已关闭(Google设置)。
- 允许访问谷歌帐户从https://accounts.google.com/b/0/DisplayUnlockCaptcha
通知:mkyong example是我的简单测试应用程序的基础。
回答:
最后我找到了答案。
1 - 当然谷歌/ gmail证书是好的;-)第1步是执行这些类型的检查。尝试手动添加证书CA等。请参阅上文。
2 - 第2步是检查已知的'SSLPoke'Java类Java类是否可以与安全网站进行联系。
3 - 检查完所有上述检查后,执行'openssl'显示我的病毒扫描器电子邮件盾阻止了流量。停止一段时间的防御是第3步。
4 - 然后我得到了来自Gmail的'未经过身份验证的'错误。允许'gmail帐户可从弱认证的应用程序'访问,这最终给出了正确发送的电子邮件。这是一个Google account security setting
以上是 访问Gmail(或安全网站)而未获取PKIX证书路径错误 的全部内容, 来源链接: utcz.com/qa/257254.html