如何在java中的ssl会话中获得主密钥?
问题描述:
我的应用程序中有一个sslscoket作为服务器,我正在运行java 1.6。 我需要握手期间使用的主密钥来实现MS-CHAP质询响应等。 我已阅读,“这个主密钥的值只知道底层的安全套接字实现,而不是通过API的SSLSession暴露”如何在java中的ssl会话中获得主密钥?
我怎样才能获得主密钥的价值?
谢谢
答
过了一段时间,我设法获得了TLS hanshake中使用的主密钥。 有可能开始使用反射和SSLSessionImpl.class它
答
Enumeration<byte[]> e = sslContext.sessionContext().getIds();
while (e.hasMoreElements()) {
byte[] b = e.nextElement();
System.out.println("session id: " + DatatypeConverter.printHexBinary(b).toLowerCase());
SSLSession session = sslContext.sessionContext().getSession(b);
Class<?> c = Class.forName("sun.security.ssl.SSLSessionImpl");
Field masterSecretField = c.getDeclaredField("masterSecret");
masterSecretField.setAccessible(true);
SecretKey k = (SecretKey)masterSecretField.get(session);
System.out.println("secret: " + DatatypeConverter.printHexBinary(k.getEncoded()).toLowerCase());
}
请提供一个代码示例 – 2016-09-29 10:19:33