gpt4 book ai didi

java - TLS 密码套件文本从某些库在 Java 中查找整数或十六进制值?

转载 作者:太空宇宙 更新时间:2023-11-03 13:57:12 25 4
gpt4 key购买 nike

我有一些使用 TLS 的代码库,它通过所选密码的整数值与实际密码处理一起工作。所选密码提取如下:

String cipherSuite = sslSocket.getSession().getCipherSuite();

这是一个类似于 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 的值,并且具有整数值 49200 或十六进制的 0xc030。代码库有一个手动定义的映射类,它返回给定密码名称的密码的整数值。

我从 IDE 中查看了那里的 SSLSocket 对象链,看看还有哪些其他方法可用,但没有找到任何可以执行手动映射类执行的查找的方法。

从另一个微弱相关的在线 SO 帖子中,我找到了一张 TLS 密码表及其值:https://web.archive.org/web/20151219054439/http://www.thesprawl.org/research/tls-and-ssl-cipher-suites/ .

现在我只是想知道而不是通过维护完整表映射的努力,以防将来情况发生变化,是否已经有一些 Java 类我们可以调用来进行查找?例如按密码名称查找以获得整数/十六进制值,反之亦然?我既不是安全专家也不是 Java 大师,所以不知道。

附言我正在使用的代码库没有我提到的表链接的完整映射,只有部分子集。遇到这个问题是因为代码库由于缺少一些现在正在系统中使用的密码而失败。我添加了丢失的密码,但正在寻找一种更优雅的方式来维护密码映射或查找。

最佳答案

您可以获取现有 session 的标准 TLS 密码套件代码。您不清楚如何“从 IDE 看...”,但是如果您使用调试器查看,您应该看到套接字(或引擎)的 SSLSessionImpl 包含 cipherSuite 又包含 int id(代码)和 String name(名称),尽管 SSLSession 的 API 仅返回后者。例如在我的 Eclipse 中:

enter image description here

由于这些类及其字段(和方法)不是公开的,因此您不能直接访问它们,但至少通过 j8 您可以通过反射来访问它们:

    SSLSocket sock = (SSLSocket) SSLSocketFactory.getDefault().createSocket("example.com",  443);
SSLSession sess = sock.getSession(); // actually sun.security.ssl.SSLSessionImpl
Class<?> c1 = Class.forName("sun.security.ssl.SSLSessionImpl");
Field f1 = c1.getDeclaredField("cipherSuite"); f1.setAccessible(true);
Object cs = f1.get(sess);
Class<?> c2 = Class.forName("sun.security.ssl.CipherSuite");
Field f2 = c2.getDeclaredField("id"); f2.setAccessible(true);
Integer id = (Integer) f2.get(cs);
System.out.printf("%x%n", id);

在 j9 up 的“模块”方案中,这给出了“非法反射访问”的警告,尽管到目前为止(直到 13.0.1)它确实成功了。如果我能更好地理解模块的工作原理,我会尝试改进它。 (或者这是 Stack,其他人可以。)

请注意,这实际上并没有像您要求的那样提供映射,仅提供当前连接的值,这似乎是您的实际需要。如果你真的想要一个映射,CipherSuite 实际上是一个枚举类,所以所有的实例实际上都在那里,但查看代码似乎用于查找此映射的方法已在不同版本中更改,并且是非公开的,所以我不会在不知道您需要哪一个的情况下尝试计算出多个示例。

关于java - TLS 密码套件文本从某些库在 Java 中查找整数或十六进制值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59221983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com