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

时间:2015-12-06 20:22:40

标签: java sockets ssl

我一直在尝试整合一个基于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中使用,如果可以,我该怎么做?

谢谢!

吉姆

1 个答案:

答案 0 :(得分:1)

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

How to find what SSL/TLS version is used in Java

  

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

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

吉姆