tm1*_*701 5 java email ssl openssl certificate
通过gmail发送电子邮件导致收到PKIX认证路径错误。从Tomcat发送电子邮件也是如此。
解决此问题后,希望您对这篇文章有用。这篇文章为您提供了针对此类错误的逐步诊断。
第1步:我尝试使用此帖子和另一个帖子来解决问题,但这并没有帮助我。在大多数情况下,这就足够了。您可以使用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时,出现错误。因此,这证明使用了“证书”。
原因:javax.mail.MessagingException:无法将命令发送到SMTP主机。嵌套异常是:javax.net.ssl.SSLException:java.lang.RuntimeException:意外错误:java.security.InvalidAlgorithmParameterException:trustAnchors参数必须为非空
步骤2C:我的Tomcat网络服务器也是如此吗?我验证了在我的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类,以查看是否可以与Google和smtp.gmail.com连接。结果在清单中:我可以通过端口443使用SSL连接到google.com和mail.google.com。
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();
}
Run Code Online (Sandbox Code Playgroud)
步骤4:信任的存储区可能已损坏?我安装了v152的JDK1.8的较新版本。我重新启动了应用程序,但没有成功。这与JDK和JRE之间的区别有关吗?仅JRE具有lib \ security \ cacerts文件。我尝试了SSL(465)和TLS(587)端口。不。
步骤5:运行openssl(使用s_client -connect smtp.gmail.com:587 -starttls smtp)显示我的病毒扫描程序(Avast)禁止发送安全邮件。因此,我暂时禁用了此电子邮件屏蔽。这给出了以下错误:
java.lang.RuntimeException:javax.mail.AuthenticationFailedException
第6步:释放病毒扫描程序网络防护后,使用openssl给出以下错误:CN = Google Internet Authority 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验证错误:num = 20:无法获取本地发行者证书 ....
允许“可通过身份验证较弱的应用访问gmail帐户”,这是您在Google帐户中的一项设置,最终可以正确发送电子邮件。这是指向您的Google帐户安全设置的链接。
步骤7:从另一台服务器发送电子邮件可能是一个问题。身份验证错误仍然是结果。要克服这些错误,您可以执行以下操作:
注意:mkyong示例是我的简单测试应用程序的基础。
最后我找到了答案。
1 - 当然,google/gmail 证书没问题;-) 第 1 步是执行这些类型的检查。尝试手动添加证书 CA 等。见上文。
2 - 第 2 步是检查已知的“ SSLPoke ”Java 类 Java 类是否可以与安全网站取得联系。
3 - 检查以上所有检查后,执行“ openssl ”表明我的病毒扫描程序电子邮件屏蔽阻止了流量。停止这种防御一段时间是第 3 步。
4 - 然后我从 Gmail 收到“未验证”错误。允许' gmail 帐户可从弱身份验证的应用程序访问',最终提供了正确发送的电子邮件。这是Google 帐户安全设置
| 归档时间: |
|
| 查看次数: |
560 次 |
| 最近记录: |