【问题标题】:How to use a particular protocol for javamail?如何为 javamail 使用特定的协议?
【发布时间】:2023-03-20 00:56:01
【问题描述】:

有一个javamail协议属性

mail.smtp.ssl.protocols

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

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

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

谢谢

【问题讨论】:

    标签: protocols jakarta-mail tls1.3


    【解决方案1】:

    在低于 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 或 8u261 或任何非荒谬的 Java 版本,并且安装和配置了最新版本的 BouncyCastle 的 BCTLS或至少在 JSSE 之前——当然还有支持它的服务器。 Javamail 只是将此设置作为一组字符串传递给 JSSE 或 BCTLS,它不需要针对不同版本的 TLS (包括 1.3)的新代码。

    【讨论】:

    • 感谢您的详细回答。我的 javamail 是 JavaMail 1.5.4,所以如果我不设置属性,它只会获取 JVM 默认值,我知道它支持 TLSv1.3。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多