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 рукопожатие ...

Ответы на вопрос(3)

Ваш ответ на вопрос