2013-03-22 70 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()); 

    }