Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何强制java服务器只接受TLS1.2并拒绝TLS1.0和TLS1.1连接_Java_Security_Ssl_Https - Fatal编程技术网

如何强制java服务器只接受TLS1.2并拒绝TLS1.0和TLS1.1连接

如何强制java服务器只接受TLS1.2并拒绝TLS1.0和TLS1.1连接,java,security,ssl,https,Java,Security,Ssl,Https,我有一个运行在Java7上的HTTPS web服务。我需要进行更改,以便此服务只接受TLS1.2连接并拒绝SSL3、TLS1.0和TLS1.1 我添加了以下Java参数,因此TLS1.2是最高优先级 -Dhttps.protocols=TLSv1.2 但它也接受来自Java客户端的TLS1.0连接。如果客户机也使用上述Java参数运行,则连接为TLS1.2,但如果客户机在没有此参数的情况下运行,则连接为TLS1.0 我在jdk/jre/lib/security文件夹中的java.securit

我有一个运行在Java7上的HTTPS web服务。我需要进行更改,以便此服务只接受TLS1.2连接并拒绝SSL3、TLS1.0和TLS1.1

我添加了以下Java参数,因此TLS1.2是最高优先级

-Dhttps.protocols=TLSv1.2
但它也接受来自Java客户端的TLS1.0连接。如果客户机也使用上述Java参数运行,则连接为TLS1.2,但如果客户机在没有此参数的情况下运行,则连接为TLS1.0

我在
jdk/jre/lib/security
文件夹中的
java.security
文件中做了一些游戏

我目前有以下禁用的算法:

jdk.certpath.disabledAlgorithms= MD2, MD4, MD5, SHA224, DSA, EC keySize < 256, RSA keySize < 2048, SHA1 keysize < 224
jdk.tls.disabledAlgorithms=DSA, DHE, EC keySize < 256, RSA keySize < 2048, SHA1 keysize < 224
jdk.certpath.disabledAlgorithms=MD2、MD4、MD5、SHA224、DSA、EC-keySize<256、RSA-keySize<2048、SHA1-keySize<224
jdk.tls.disabledAlgorithms=DSA、DHE、EC密钥大小<256、RSA密钥大小<2048、SHA1密钥大小<224
我正在使用Java7更新79。我不倾向于截取每个连接并检查TLS版本

我的服务器证书是用MD5和RSA算法生成的2048位

如果禁用的算法列表使用RSA代替RSA keySize<2048,我会得到
SSLHandShakeError
,并显示错误消息:

没有共同的密码套件

我的测试程序正在从以下URL运行HTTP服务器:


请帮助我们如何让java只接受TLS1.2连接。

我找到了一个解决方案。我设定了

jdk.tls.disabledAlgorithms= SSLv2Hello, SSLv3, TLSv1, TLSv1.1
在服务器上的文件
jre/lib/security/java.security

设置此选项后,服务器只接受TLS1.2连接,并拒绝较低安全性的协议版本。

只是一个小注释

在问题中,您声明您使用MD5生成了2048大小的证书。但是在cert path alg中,您禁用了MD5,因此这通常不起作用。其次,现代浏览器(如InternetExplorer10/Edge)禁止使用MD5哈希生成的服务器证书


我建议您至少使用SHA256或 我在“/java/jdk1.7.0_79/jre/lib/security”-java.security文件中也做了同样的更改,但是一些客户端仍然能够使用SSL协议调用我的服务

----变化
jdk.tls.disabledAlgorithms=SSL、SSLv2、SSLv3、TLSv1、TLSv1.1、MD5、SSLv3、DSA、RSA keySize<2048

是否
SSLContext.getInstance(“TLSv1.2”)
起作用?@user5266804否,不起作用。
SSLContext.getInstance
方法基本上将
SSL
TLS
作为参数。我敢打赌,在幕后,Sun提供商甚至不关心您传递的字符串:您总是得到JSSE提供的“TLS引擎”。在哪里设置?您需要在“java.security”中设置它您可以在/jre/lib/security文件夹中找到的文件。在jdk/jre/lib/security中更改此文件后,是否需要重新编译我的应用程序?此更改不需要重新编译,因为它不是代码更改。我使用以下属性jdk.tls.disabledAlgorithms=EC,ECDHE,DHE,TLSv1.2,SSLv3,RSA keySize<2048但当我获得GetSupportedCipherSuite()时,它也会显示禁用的密码“但一些客户端仍然能够使用SSL协议调用我的服务。”我喜欢这个。