javamail 如何使用特定的协议?

问题描述

一个javamail协议属性

mail.smtp.ssl.protocols

这允许用户使用特定协议(TLSv1.2 或 1.1)。

如果不使用该属性怎么办?然后它会被JVM设置设置吗?

另外,如果我想使用 TLSv1.3,我必须使用什么版本的 Javamail?

谢谢

解决方法

在低于 1.5.3 的 javamail 版本中,如果未设置 sysprop,它将使用 TLSv1.0,这 (1) 在最新版本的 Java 上根本不起作用,并且 (2) 在越来越多的服务器上不起作用,因为1.0 被 BEAST 短暂地“破坏”了,许多当局不再允许它。请参阅 postfix and openJDK 11: "No appropriate protocol (protocol is disabled or cipher suites are inappropriate)",尤其是我的答案中标记为 EDIT 的部分。

在更新的版本中,正如您在链接的源代码中看到的那样,它使用 JVM 默认值,除非它删除 SSL 版本(如果存在)——而且自 2015 年以来的所有 Java 版本都从 JVM 默认值中省略了 SSLv3(因为它是 真的被 POODLE 弄坏了)。 (SSLv2Hello 无论如何都不是实际的协议版本,甚至更早被删除。)

要使用 TLSv1.3,您需要一个支持它的 Java 版本:11 up 或 8u261 up,或者任何非荒谬的 Java 版本,并且安装和配置了足够新的 BouncyCastle BCTLS 版本JSSE 的或至少在 JSSE 之前——当然还有支持它的服务器。 Javamail 只是将此设置作为一组字符串传递给 JSSE 或 BCTLS,对于不同版本的 TLS,包括 1.3,它不需要新代码。