我正在尝试运行一个独立的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
我已经完成了以下步骤:
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实用程序并得到相同的错误,因此这与我获取和导入证书的方式有关。
我想念什么?