我有以下代码行来设置SSL连接:
HttpsURLConnection con = (HttpsURLConnection) new URL(url).openConnection();
我使用给定的连接发送消息并检索响应。 现在我已经得到了一个问题:在这个连接中使用了哪种安全技术?我想知道连接是否是,例如,TLS1.2。如何使用Java检索它?
答案 0 :(得分:1)
HttpsURLConnection
将使用客户端和服务器之间协商的任何方案。可以获得有关所使用的密码套件以及客户端和服务器证书的一些信息,但协议/版本不会直接由公共API公开。
检索实际使用的协议很棘手。
如果您启用了SSL调试,则调试输出将包含协议版本和其他大量信息。但是,由于调试输出的格式未指定/可能会更改,因此尝试以编程方式提取此格式不是一个好主意。
但如果眼球调试输出可以接受,那就是答案。
如果您阅读了Java SSL代码库,您会发现一个名为SSLEngineImpl
的类,它有一个名为protocolVersion
的私有字段,它提供了连接所使用的协议和版本。不幸的是,“引擎”实例被深深埋没,并且很难在运行时获取它。
如果您实现自己的SSLSocketFactory
,则可以在会话建立后获取SSLSession
对象使用的协议;见Get SSL Version used in HttpsURLConnection - Java。
最后,可以通过解码通过TCP / IP连接发送的初始消息来确定使用哪种协议。消息是“客户端问候”和“服务器问候”消息。在此阶段,连接未加密。
Oracle参考资料: