<分区>
<分区>
我有以下几行代码来设置 SSL 连接:
HttpsURLConnection con = (HttpsURLConnection) new URL(url).openConnection();
我使用给定的连接发送消息并检索响应。 现在我有一个问题:在这个连接中使用了哪种安全技术?我想知道连接是否为 TLS1.2。我如何使用 Java 检索它?
最佳答案
HttpsURLConnection
将使用客户端和服务器之间协商的任何方案。可以获取有关所用密码套件以及客户端和服务器证书的一些信息,但协议(protocol)/版本不会直接由公共(public) API 公开。
检索实际使用的协议(protocol)很棘手。
如果您启用了 SSL 调试,则调试输出将包括协议(protocol)版本和大量其他信息。但是,由于调试输出的格式未指定/可能会更改,因此尝试以编程方式提取它并不是一个好主意。
但如果目测调试输出是可以接受的,这就是答案。
如果您阅读 Java SSL 代码库,您会发现一个名为 SSLEngineImpl
的类,它有一个名为 protocolVersion
的私有(private)字段,它给出了协议(protocol)和版本连接正在使用。不幸的是,“引擎”实例隐藏得很深,很难在运行时访问它。
如果您实现自己的SSLSocketFactory
,您可以在 session 建立后从SSLSession
对象中获取使用的协议(protocol);见Get SSL Version used in HttpsURLConnection - Java .
最后,可以通过对通过 TCP/IP 连接发送的初始消息进行解码来确定使用的是哪种协议(protocol)。这些消息是“客户端问候”和“服务器问候”消息。连接在此阶段未加密。
Oracle 引用资料:
关于java - HttpsURLConnection 使用了哪种安全技术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49109304/
相关文章:
java - 如何显示 Jetty HTTPS 客户端可用的协议(protocol)和密码套件?
java - 由于 SSLException 无法连接到 SQLServer
java - Spring MVC : What happens if I start a thread in a controller action?
java - 如何使用 R2dbc 将 jsonb 从 Postgresql 提取到 Spring webflux
authentication - Marathon - SSL 和基本访问身份验证
Android HttpsUrlConnection java.io.EOFException