我的應用程序中有一個sslscoket作爲服務器,我正在運行java 1.6。 我需要握手期間使用的主密鑰來實現MS-CHAP質詢響應等。 我已閱讀,「這個主密鑰的值只知道底層的安全套接字實現,而不是通過API的SSLSession暴露」如何在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