Javamail和gmail,获取“ PKIX路径构建失败”

时间:2020-03-19 03:05:54

标签: java eclipse gmail jakarta-mail

我正在尝试运行一个独立的Java类,该类将以imap的形式连接到Gmail。这是代码摘录(用户名和密码已屏蔽)


    Properties props = System.getProperties();

    props.setProperty("mail.store.protocol", "imap"); 

    System.out.println("getting session");

    Session session = Session.getInstance(props);

    System.out.println("getting store");

    Store store = session.getStore("imaps");

    System.out.println("connecting");

    store.connect("imap.gmail.com", "xxxxx", "yyyyyy");

尝试运行时,它会显示“正在连接”消息,但会抛出该消息

javax.mail.MessagingException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target;
  nested exception is:
    javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

我已经完成了以下步骤:

  • a)(来自Linux实例):openssl s_client -connect imap.gmail.com:993
  • b)从上面的输出中复制了证书 到一个pem文件中,然后在Windows上运行
keytool -keystore cacerts -import -trustcacerts -alias gmailcert -file c:\gmailcert.pem -storepass changeit

以上步骤在此文件夹中 C:\ Program Files \ Amazon Corretto \ jdk11.0.6_10 \ lib \ security

在运行类的Eclipse中,我设置了这些jvm args

-Djavax.net.ssl.trustStore="c:/Program Files/Amazon Corretto/jdk11.0.6_10/lib/security/cacerts"
-Djavax.net.ssl.trustStorePassword="changeit"

我也尝试过

-Djavax.net.ssl.trustStore="c:\Program Files\Amazon Corretto\jdk11.0.6_10\lib/security\cacerts"
-Djavax.net.ssl.trustStorePassword="changeit"

-Djavax.net.ssl.trustStore="c:\\Program Files\\Amazon Corretto\\jdk11.0.6_10\\lib\\security\\cacerts"
-Djavax.net.ssl.trustStorePassword="changeit"

我也提到了此site,以确保我正确导入了gmail证书。然后,我运行一个SSLPoke实用程序并得到相同的错误,因此这与我获取和导入证书的方式有关。

我想念什么?

1 个答案:

答案 0 :(得分:0)

您的防病毒程序很可能会拦截该连接。如果可以将其配置为允许从程序直接连接,那将更好。缺少该功能,请参见JavaMail FAQ以获得有关证书的帮助。