外部系统要求任何访问它的人都应该首选 TLS 1.3。如何使我的 Java 桌面应用程序更喜欢 TLS 1.3?我使用的是 Java 17,并且使用 TLS < 1.2 is disabled using
jdk.tls.disabledAlgorithms
。
从搜索看来,
jdk.tls.client.protocols
可能是所需的系统属性,但它是否以某种“首选顺序”排列?例如,如果我尝试以下操作:
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL
jdk.tls.client.protocols=TLSv1.3,TLSv1.2
现在会在尝试 1.2 之前先尝试 1.3 吗?这可以以某种方式验证吗?是否有必要,或者这会以某种方式模仿 Java 17 或更高版本的某些默认行为?
我不确定这真的是编程还是开发,但是:
没有“之前”。 TLS 握手会比较两个端点支持的版本,并使用两者支持的最高版本。是的,仅支持 1.3 和 1.2,这是 16 及以上版本的默认设置,也是 11.0.11 和 8u291 及以上版本(即自 2021 年春季以来)的默认设置。
要进行验证,请使用 sysprop
javax.net.debug=ssl:handshake
打开跟踪(至少,如果需要,可以添加更多)或使用wireshark、tcpdump/snoop 或类似工具从外部捕获,并查看 ClientHello、ServerHello 和 HelloRetryRequest(如果适用)中的supported_versions 扩展。 (这也将确认外部系统是否同意1.3。)
另请注意:
jdk.tls.client.protocols
是system属性,但jdk.tls.disabledAlgorithms
中的java.security
是security属性;这些是不同的东西,并且设置方式不同。