Javamail и gmail, получая сообщение «Ошибка построения пути PKIX» - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь запустить автономный класс Java, который будет подключаться к Gmail как imap. Вот выдержка из кода (имя пользователя и пароль маскированы)


    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

-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"

Я также сослался на этот сайт , чтобы убедиться, что я правильно импортирую сертификат gmail. Затем я запустил утилиту SSLPoke и получил ту же ошибку, так что это связано с тем, как я получаю и импортирую сертификат.

Чего мне не хватает?

1 Ответ

0 голосов
/ 20 марта 2020

Скорее всего, у вас есть антивирусная программа, которая перехватывает соединение. Было бы лучше, если бы вы могли настроить его, чтобы разрешить прямое соединение с вашей программой. В отсутствие этого обратитесь к FAQ по JavaMail для получения справки о сертификате.

...