如何在 Java 中获取 HTTPS 连接使用的密码?我需要使用以下代码在点击 URL 后找到所使用的 TLS 版本,无论是 TLS 1.1 还是 1.2:
url = new URL(https_url);
HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
以下为 Firefox 浏览器的屏幕截图。 任何人都可以帮我得到这个吗?
我已经尝试过了
SSLSocket socket = (SSLSocket) con.getSSLSocketFactory().createSocket();
String[] test = socket.getSSLParameters().getProtocols();
但这给出了为连接启用的协议列表。我需要服务器响应中使用的协议。
随附的屏幕截图显示了我期望阅读的内容(TLS 1.2)
致电
HttpsURLConnection.getCipherSuite()
。
我之前给出了一个冗长的答案,但现在我发现这是不必要的。
我认为
con.getCipherSuite();
应该可以解决算法问题......
https://docs.oracle.com/javase/7/docs/api/javax/net/ssl/HttpsURLConnection.html
这对于 tls 来说可能是一个奇怪的解决方案,但如果你设法打开一个新的 SSL 套接字(也许你可以用
socket.close();
关闭)
SSLSocket socket = (SSLSocket) con.getSSLSocketFactory().createSocket();
String[] test = socket.getSSLParameters().getProtocols();
在测试值中请注意:您可以获得可用的 TLS 版本,而不仅仅是一个。
您可以使用以下命令打印协议(TLSv1.2)和套件(TLS_ECDHE_RSA_WITH_AES):
SSLSocket ss = (SSLSocket) SSLSocketFactory.getDefault().createSocket("host", 443);
System.out.println("protocol: "+ss.getSession().getProtocol());
System.out.println("suite: "+ss.getSession().ss.getSession().getCipherSuite());