java - HttpsURLConnection 使用了哪种安全技术?

标签 java ssl httpsurlconnection

<分区>

我有以下几行代码来设置 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/

上一篇:python - 请求失败,出现 SSLError 'failed to allocate SSL context'

下一篇:Python 3.6 SSL - 使用 TLSv1.0 而不是 TLSv1.2 密码 -(2 种身份验证和自签名证书)

相关文章:

java - 如何显示 Jetty HTTPS 客户端可用的协议(protocol)和密码套件?

java - 由于 SSLException 无法连接到 SQLServer

android - 验证器响应代码 400

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

java - 使用图像作为按钮,获得空白屏幕

java - 所包含的匿名内部类使用的函数的参数由 "final"修改。但为什么?

Java setProperty "https.protocols", "TLSv1.2"用于一个 REST 调用