我正在開發一個java代理來監視在我的應用程序服務器中發生的http通信。我想知道在傳出Https連接中使用的SSL版本(SSLv3,TLS等)。有沒有辦法通過任何方式獲得SSL版本?獲取HttpsURLConnection中使用的SSL版本 - Java
2
A
回答
4
我用這個解決方案,也許它可以幫助你:
首先,你需要一個擴展類的SSLSocketFactory
附上HandshakeCompletedListener
由SSLSocketFactory
創建的套接字: (由How to override the cipherlist sent to the server by Android when using HttpsURLConnection?啓發)
public class SecureSSLSocketFactory extends SSLSocketFactory {
private final SSLSocketFactory delegate;
private HandshakeCompletedListener handshakeListener;
public SecureSSLSocketFactory(
SSLSocketFactory delegate, HandshakeCompletedListener handshakeListener) {
this.delegate = delegate;
this.handshakeListener = handshakeListener;
}
@Override
public Socket createSocket(Socket s, String host, int port, boolean autoClose)
throws IOException {
SSLSocket socket = (SSLSocket) this.delegate.createSocket(s, host, port, autoClose);
if (null != this.handshakeListener) {
socket.addHandshakeCompletedListener(this.handshakeListener);
}
return socket;
}
// and so on for all the other createSocket methods of SSLSocketFactory.
@Override
public String[] getDefaultCipherSuites() {
// TODO: or your own preferences
return this.delegate.getDefaultCipherSuites();
}
@Override
public String[] getSupportedCipherSuites() {
// TODO: or your own preferences
return this.delegate.getSupportedCipherSuites();
}
然後,您需要實現HandshakeCompletedListener
接口。您必須實現handshakeCompleted
方法:
public class MyHandshakeCompletedListener implements HandshakeCompletedListener {
@Override
public void handshakeCompleted(HandshakeCompletedEvent event) {
SSLSession session = event.getSession();
String protocol = session.getProtocol();
String cipherSuite = session.getCipherSuite();
String peerName = null;
try {
peerName = session.getPeerPrincipal().getName();
} catch (SSLPeerUnverifiedException e) {
}
}
在handshakeCompleted
,你可以得到的協議版本(也許TLSv1.2工作),並順便也對密碼套件等信息,這也是通過HttpsConnection
訪問。 您可以在連接之前通過conn.setSSLSocketFactory
設置定製SSL插座工廠:
private void setupAndConnect() {
URL url = new URL("https://host.dom/xyz");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(/*keyManagers*/null, /*trustManagers*/null, /*new SecureRandom()*/null); // simple here
conn.setSSLSocketFactory(new SecureSSLSocketFactory(sslContext.getSocketFactory(), new MyHandshakeCompletedListener()));
// conn.set... /* set other parameters */
conn.connect();
相關問題
- 1. Android:使用HttpsURLConnection的HTTPS(SSL)連接
- 2. 使用java類HttpsURLConnection
- 3. 獲取SSL上下文HttpsURLConnection的從x509證書
- 4. NullPointerException與HttpsURLConnection和SSL
- 5. Android HttpsUrlConnection驗證SSL
- 6. 我如何使用HttpsURLConnection的在Java中
- 7. 使用Websphere MQ版本7.0.1的C# - SSL
- 8. 的Java HttpsURLConnection的
- 9. 與Android版本不同的HttpsURLConnection問題
- 10. 用Java獲取組件版本
- 11. 在Java中獲取Windows內核版本?
- 12. 如何找到在Java中使用什麼SSL/TLS版本
- 13. 如何在Linux中使用單行命令獲取Java版本
- 14. 如何使用PHP獲取用戶的Java版本?
- 15. 使用python獲取安裝的java版本的詳細信息
- 16. System.Web.Services.Protocols.SoapHttpClientProtocol使用什麼版本的SSL/TLS?
- 17. 獲取Elasticsearch版本的Java API
- 18. 在Javamail中從smtp服務器獲取SSL版本
- 19. Javascript SSL版本
- 20. 配置Java HttpsURLConnection
- 21. Java HttpsURLConnection SSLHandshakeException
- 22. 如何從apk文件使用JAVA eclipse獲取應用版本
- 23. 獲取mod_pagespeed使用SSL
- 24. 使用SSL時,HttpClient和HttpsURLConnection返回不同的證書
- 25. 從Java Applet獲取Windows Service Pack版本?
- 26. Java - 沒有獲取信號量版本
- 27. 使用Java驅動程序獲取Mongo實例版本
- 28. SSL/TLS版本兼容性?
- 29. 使用Puppet Fact獲取軟件版本
- 30. 使用git獲取最新版本