2013-03-22 71 views
2

我的应用程序中有一个sslscoket作为服务器,我正在运行java 1.6。 我需要握手期间使用的主密钥来实现MS-CHAP质询响应等。 我已阅读,“这个主密钥的值只知道底层的安全套接字实现,而不是通过API的SSLSession暴露”如何在java中的ssl会话中获得主密钥?

我怎样才能获得主密钥的价值?

谢谢

回答

1

过了一段时间,我设法获得了TLS hanshake中使用的主密钥。 有可能开始使用反射和SSLSessionImpl.class它

+0

请提供一个代码示例 – 2016-09-29 10:19:33

-1

它不通过API可用。正如你的报价所述。

注意主秘密不是关键。

+0

是否有任何选项,使这个在java中?另一个API? – Jaime 2013-03-22 09:26:53

+0

“你不能”的部分你不明白吗? – EJP 2013-03-23 01:05:43

+0

我明白了,非常感谢您的加入,但我无法理解他们如何实现SSL的API,并且他们没有提供实现MS-CHAP的方法。 – Jaime 2013-03-26 10:15:07

2
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()); 

    }