我有多个基于java的应用程序,通过TLS与每个应用程序交互,我正在尝试为TLS通信强制128位密码。在java(服务器端)上强制执行128位密码的方法是在JDK的java.security
文件中设置以下属性:
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize > 128,
EC keySize > 128,
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA,
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,
TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_256_CCM,
TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8, 3DES_EDE_CBC, anon, NULL
我有一个测试java程序,它使用HttpsURLConnection访问部署在jetty容器中的web资源,该容器也使用相同的JDK(配置为只提供128个用于TLS通信的密码),并且测试程序在成功的SSL握手(成功地交换客户机-服务器hello消息和服务器呈现TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256和客户端也接受相同的密码)时工作良好。
但是,当我试图使用curl访问相同的web资源时,curl命令会失败,并出现以下错误:
curl:(35) schannel: next InitializeSecurityContext failed: SEC_E_ILLEGAL_MESSAGE (0x80090326) -此错误通常发生在接收到致命的SSL/TLS警报时(例如握手失败)。
当使用wireshark捕获网络流量时,也会看到类似的异常。
问:如何为基于java的应用程序执行TLS通信的128个密码?
发布于 2021-10-27 09:43:34
我正在尝试为TLS通信执行128位密码。
这是个奇怪的目标,你做错了。
任何密钥大小小于128位的密码都是过时的,不应该使用。对TLS来说,这意味着没有DES。DES和RC4在TLS中都是过时和弱的,原因超出了键大小,不应该使用。
我想不出有什么理由禁止大于128位的密钥。具有128位密钥的对称密码是可以的,为了性能,您可能更喜欢它们而不是更大的密钥大小。但是,为什么不允许与只支持256位密钥的客户端或服务器对话呢?
卫生署keySize >128号欧共体keySize >128号
DH和EC不是对称密码。它们是非对称密码机制。不同密码机制的合理密钥大小之间没有关系。128位密钥对于EC、DH和RSA来说是非常小的.您可以了解https://www.keylength.com/;上常见密码机制的合理密钥大小--“保理模”表示RSA,“离散对数”表示DH。实际上,DH的“正常”密钥大小为2048位,ECC的“正常”密钥大小为256位。
因此,假设上面的代码段意味着它的意思(我不熟悉java.security语法),那么对于EC或DH,您将禁止所有合理的密钥大小。我认为大多数TLS实现不能与≤128位DH一起工作,并且没有具有≤128位大小的标准曲线。这只留下了基于RSA加密的密码套件,而RSA加密本身是不受欢迎的。还可能在握手过程中出现错误,因为TLS堆栈希望能够使用ECC和DH,但是由于禁止所有可用的密钥大小,所以失败了。
若要禁用256位密码,只需禁用以_256
命名的密码套件.也禁用过时的机制:有EDE
、NULL
、RC4
的任何东西,没有ECDHE
或DHE
…的任何东西(这不是一个详尽无遗的清单。)再说一次,我想不出有什么好的理由这么做。
https://security.stackexchange.com/questions/256502
复制相似问题