2

我的客户端(java 1.8)正在尝试使用TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384密码套件与远程服务器建立 TLS 连接。但是抛出一个java.lang.IllegalStateException

HashAlgorithm.sha256(4) is not being tracked

使用的加密材料应基于脑池曲线。客户端使用 BouncyCastleJsseProvider 加密提供程序。已设置以下系统属性

System.setProperty("jdk.tls.ephemeralDHKeySize", "2048");
System.setProperty("jdk.tls.server.defaultDHEParameters",
            "{ " + "FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 "
                    + "29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD "
                    + "EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245 "
                    + "E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED "
                    + "EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D "
                    + "C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F "
                    + "83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D "
                    + "670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B "
                    + "E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9 "
                    + "DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510 "
                    + "15728E5A 8AACAA68 FFFFFFFF FFFFFFFF, 2}");
System.setProperty("jdk.tls.namedGroups", "brainpoolp256r1,brainpoolP384r1");

出于调试目的,已使用 WireShark 嗅探握手:

线鲨.

从屏幕截图中可以看出,客户端正在请求正确的密码套件。客户您好 - 签名哈希算法: 客户您好 - 签名哈希算法

服务器接受套件并处理握手,直到客户端生成服务器证书验证消息,这导致前面提到的 java.lang.IllegalStateException。由于异常消息显示“未跟踪 HashAlgorithm.sha256(4)”。我假设,出于某种原因,客户端不使用 sha384 来生成“证书验证”,而是使用 sha256。

我假设我可能错过了一些客户端配置步骤,以使 sha384 可用。遗憾的是,我没有找到可以为我提供一些有用信息的提示。有人可以帮我解决这个问题吗?

PS如果TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256选择而不是TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384握手操作成功,但是这个套件没有使用sha384来计算证书验证消息的内容。

PSS 由于客户端似乎没有提供https://www.rfc-editor 中所述的 (sha256(4), ecdsa(3)) 和 (sha384(5), ecdsa(3)) 的签名哈希算法。 org/rfc/rfc5246#section-7.4.1.4.1,是否有一些选项可以以编程方式提供对这些算法的支持?

添加了服务器证书请求 WireShark 协议的 PSSS 屏幕截图。 服务器 - 证书请求

4

0 回答 0