如何从Java SSLSocket访问最终协商的协议和密码



我一直在尝试组装一个小型的基于Java的HTTPS/SSL服务器,主要是为了获得一些可以相当便携的东西,用于我们的测试/诊断目的。

我有这样一个服务器应用程序在工作,基于这里的例子:

http://www.mybinarylife.net/2012/06/java-ssl-threaded-echo-server.html

但是,正如我所说,我想要的一件事是,这个服务器应用程序将为每个传入连接输出最终协商的协议和密码信息,类似于Apache自定义日志记录如何输出本页所述的协议和加密信息:

https://isc.sans.edu/forums/diary/Logging+SSL/18847/

In Apache, you can log the protocol version and cipher easily by logging the respective environment variable [1] . For example:
CustomLog logs/ssl_request_log  "%t %h "{User-agent}i" %{SSL_PROTOCOL}x %{SSL_CIPHER}x "
Logs SSL protocol and cipher. 

但在基于Java的应用程序中,我看不到任何方法或任何东西可以获得这些信息?

SSLSocket有获得ENABLED协议等的方法,但似乎没有任何获得最终协商协议和密码的方法。

有人知道这在Java中是否可行吗?如果可以,我该怎么做?

谢谢!!

Jim

我终于找到了问题的答案。基本上就是这里说的:

如何查找Java 中使用的SSL/TLS版本

从客户端上的SSLSocket获取SSLSession,并使用其getProtocol()方法。

我可以使用SSLSocket上的getSession()方法来获取SSLSession,然后使用SSLSession的getProtocol()和getCipherSuite()方法获取我想要的信息。

Jim

最新更新