JavaMail SSL без сертификата доверия аутентификации независимо
У меня есть локальный почтовый сервер (hMailServer) с SSL (порт 465) и самозаверяющий сертификат.
Домен естьfoobar.com»
Я настроил мойProperties
включить ssl, отключить аутентификацию и доверять любому хосту
props.put("mail.smtp.auth", "false");
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.trust", "*");
Если я отправлю сообщение через статический вызовTransport.send()
Письмо будет доставлено.
Если я попытаюсь получитьtransport
Экземпляр из сессии, то я получаю
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
Как статический вызов избегает исключения SSLHandshakeException?
Вот'мой код тестера:
public static void main(String[] args) throws Exception {
Properties props = new Properties();
props.put("mail.smtp.host", "127.0.0.1");
props.put("mail.debug", "false");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.timeout", "60000");
props.put("mail.smtp.auth", "false");
props.put("mail.smtp.sendpartial", "true");
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.trust", "*");
Session session = Session.getInstance(props);
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]"));
message.setSubject("Just a Test " + new Date());
message.setText("Hello World");
//Comment and uncomment to test
Transport.send(message, message.getAllRecipients());
//Transport t = session.getTransport("smtps");
//t.connect();
//t.sendMessage(message, message.getAllRecipients());
//t.close();
}
Это локальная система, скрытая снаружи, поэтому я не беспокоюсь о том, что человек в середине атаки генерирует свои собственные сертификаты, чтобы обойти SSL рукопожатие ...