我需要禁用java.security 文件(java 8 SE)中的以下行:
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
include jdk.disabled.namedCurves
Windows 中的图像。
窗口路径:Program Files\Java\jre1.8.0_301\lib\security\java.security
禁用这些行的目的是避免出现以下错误消息:
Error: javax.net.ssl.SSLHandshakeException: No appropriate protocol
(protocol is disabled or cipher suites are inappropriate)
以及此处发布的解决方案提案(即对这些行发表评论)。
我不确定在行首 (#) 是否会禁用这两个操作系统的注释。因为这个oracle文档说是//
无论哪个用于注释行,我也不知道是否有必要注释掉所有 3 行,或者只是注释掉第一行禁用所有 3。示例:
这边走:
# jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
include jdk.disabled.namedCurves
还是那样?
# jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
# DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
# include jdk.disabled.namedCurves
问题:
如何在 Windows 和 Linux 上注释掉(禁用)java.security文件中的前几行以避免“错误:javax.net.ssl.SSLHandshakeException”,或者有人向我解释是否有另一种解决方案,不同于已发布的解决方案
是的,所有系统上的注释字符都是#。您链接的网页是关于 SecurityManager 的安全策略文件(最初是为小程序设计的,现在很少使用);java.security 不是安全策略文件。
是的,全部 3 行。继续语法(反斜杠-eol)仅适用于未注释的行,因此要注释在多(物理)行上连续的项目,请注释每一行。
但是,由于您现在明确了协议上的错误,因此只删除有问题的协议(几乎可以肯定是 TLSv1(.0) 和/或 TLSv1.1 —— SSLv3 自 8u31 以来已被禁用)会更安全2015 年它被 POODLE 灾难性地破坏后),剩下的就离开了。
您是否偶然尝试使用旧版本的 javamail?有一段时间(错误)功能将安全模式默认为 TLSv1(.0)(仅)并在 8u291 和其他几个版本出现时触发此症状;我们有几个关于它的现有问题,只需搜索“javamail 没有适当的协议”。虽然删除或减少 disabledAlgorithms 设置(或回归到 8u291 以下)将允许客户端尝试TLS1.0 连接,但今天许多服务器将不接受它,因为 TLS1.0 被认为已损坏;这就是为什么Java 现在更改为默认禁用它的原因。在这种情况下,最好升级 javamail或显式配置
mail.{smtp,imap,pop3}.ssl.protocols
为可能适合今天的值TLSv1.2,TLSv1.3
。(其他)替代方案:通常,您可以将系统属性设置
java.security.properties
为每个/任何 JVM 分别指向不同(修改的)文件,例如使用-D
命令行,而不是更改 JRE/lib/security/java.security 中影响所有 JVM 的内容,或者您可以Security.setProperty()
在接近开头的地方充分调用您的代码。