#java #jakarta-mail #keystore
#java #джакарта-почта #хранилище ключей
Вопрос:
Я пытаюсь отправить электронное письмо через smtp на smtp.mailgun.org. Меня не беспокоит Java-код, который пытается отправить электронное письмо.
Окружающая среда:
Windows 10 Eclipse Photon Java 1.8.0_191 пакет java: com.sun.mail.javax.mail: 1.6.2
Я пытаюсь отправить через 587, используя TLS. У меня нет большого опыта создания или изменения хранилищ ключей.
В eclipse.ini
я добавил следующие два аргумента после -vmargs
-Djavax.net.ssl.trustStore="C:/Program Files/Java/jdk1.8.0_192/jre/lib/security/cacerts "
-Djavax.net.ssl.trustStorePassword="password"
Я перезапустил Eclipse и продолжаю получать сообщение об ошибке, приведенное ниже.
javax.mail.MessagingException: Could not convert socket to TLS;
nested exception is:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1652)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:534)
at javax.mail.Service.connect(Service.java:291)
at javax.mail.Service.connect(Service.java:172)
at com.mako.mg.manager.MakoMailGunSmtpManager.sendEmail(MakoMailGunSmtpManager.java:158)
at com.mako.mg.manager.MakoMailGunSmtpManager.main(MakoMailGunSmtpManager.java:180)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at sun.security.ssl.Handshaker.processLoop(Unknown Source)
at sun.security.ssl.Handshaker.process_record(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:503)
at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:443)
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1647)
... 5 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
at sun.security.validator.Validator.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
... 16 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at java.security.cert.CertPathBuilder.build(Unknown Source)
... 22 more
У моего Eclipse возникла проблема с использованием cacerts? или мне нужно создать хранилище ключей из cacerts?
Я не могу найти c:users<myuser>.keystore
. Я настроен на просмотр скрытых файлов и папок.
Спасибо за вашу помощь в решении этой проблемы.
Комментарии:
1. Обычно вам не нужно указывать
cacerts
хранилище. Опубликуйте свой код. Есть ли у вас рабочий прокси-сервер с завершением SSL? Если вы это сделаете, то вам нужно добавить сертификат вашего прокси-сервера в cacerts (или указать отдельное хранилище).
Ответ №1:
Я добавил -Djavax.net.debug = ssl и просмотрел шаги, предшествовавшие сбою. Я обнаружил, что мой антивирус мешал и вызывал сбой. Отключил антивирус для тестирования, и электронное письмо было успешно отправлено.
На сайте AVG найдена ссылка со следующими шагами
откройте AVG Antivirus, нажмите Меню-> Настройки-> Компоненты-> Сканер электронной почты-> Настроить. В следующем окне в разделе «Основные настройки», пожалуйста, отключите «сканировать исходящую электронную почту» и сообщите нам, решит ли это проблему.