Java jsoup和密码套件SSL

Java jsoup和密码套件SSL,java,ssl,jsoup,Java,Ssl,Jsoup,在建立SSL连接时,我可以选择jsoup使用的密码吗? 我有Java7和jsoup的最新版本,但当jsoup进行SSL连接时,它永远不会使用web服务器支持的最佳密码进行连接。我能强迫你选择吗 编辑 现在,当连接到https时,jsoup只对ECDHE使用密码 我能强迫你选择吗 不可以。SSL服务器选择密码套件,而不是客户端。除非您对启用的密码套件进行了更改,否则您应该从Java支持的几十个密码套件中选择任何密码套件。是的,我可以强制选择。当我仅使用我的密码设置启用的密码套件时,服务器(如果支持

在建立SSL连接时,我可以选择jsoup使用的密码吗? 我有Java7和jsoup的最新版本,但当jsoup进行SSL连接时,它永远不会使用web服务器支持的最佳密码进行连接。我能强迫你选择吗

编辑

现在,当连接到https时,jsoup只对ECDHE使用密码

我能强迫你选择吗


不可以。SSL服务器选择密码套件,而不是客户端。除非您对启用的密码套件进行了更改,否则您应该从Java支持的几十个密码套件中选择任何密码套件。

是的,我可以强制选择。当我仅使用我的密码设置启用的密码套件时,服务器(如果支持)将选择它。我开发了一个简单的classIf,并且仅当服务器支持该套件时。服务器仍然选择。这不是个好主意。
import java.util.ArrayList;
import java.util.Arrays;
import java.net.Socket;
import java.net.UnknownHostException;
import java.net.InetAddress;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.HttpsURLConnection;
import java.io.IOException;

public class PreferredCipherSuiteSSLSocketFactory extends SSLSocketFactory 
{
private final SSLSocketFactory delegate;

public PreferredCipherSuiteSSLSocketFactory(SSLSocketFactory delegate) 
{
    this.delegate = delegate;
}
public PreferredCipherSuiteSSLSocketFactory() 
{
    this.delegate = HttpsURLConnection.getDefaultSSLSocketFactory();
}

@Override
public String[] getDefaultCipherSuites() 
{
    return setupPreferredDefaultCipherSuites(this.delegate);
}

@Override
public String[] getSupportedCipherSuites() 
{
    return setupPreferredSupportedCipherSuites(this.delegate);
}

@Override
public Socket createSocket(String arg0, int arg1) throws IOException, UnknownHostException 
{
    Socket socket = this.delegate.createSocket(arg0, arg1);
    String[] cipherSuites = setupPreferredDefaultCipherSuites(delegate);
    ((SSLSocket)socket).setEnabledCipherSuites(cipherSuites);

    return socket;
}

@Override
public Socket createSocket(InetAddress arg0, int arg1) throws IOException 
{
    Socket socket = this.delegate.createSocket(arg0, arg1);
    String[] cipherSuites = setupPreferredDefaultCipherSuites(delegate);
    ((SSLSocket)socket).setEnabledCipherSuites(cipherSuites);

    return socket;
}

@Override
public Socket createSocket(Socket arg0, String arg1, int arg2, boolean arg3) throws IOException
{
    Socket socket = this.delegate.createSocket(arg0, arg1, arg2, arg3);
    String[] cipherSuites = setupPreferredDefaultCipherSuites(delegate);
    ((SSLSocket)socket).setEnabledCipherSuites(cipherSuites);

    return socket;
}

@Override
public Socket createSocket(String arg0, int arg1, InetAddress arg2, int arg3) throws IOException, UnknownHostException 
{
    Socket socket = this.delegate.createSocket(arg0, arg1, arg2, arg3);
    String[] cipherSuites = setupPreferredDefaultCipherSuites(delegate);
    ((SSLSocket)socket).setEnabledCipherSuites(cipherSuites);

    return socket;
}

@Override
public Socket createSocket(InetAddress arg0, int arg1, InetAddress arg2, int arg3) throws IOException 
{
    Socket socket = this.delegate.createSocket(arg0, arg1, arg2, arg3);
    String[] cipherSuites = setupPreferredDefaultCipherSuites(delegate);
    ((SSLSocket)socket).setEnabledCipherSuites(cipherSuites);

    return socket;
}

private static String[] setupPreferredDefaultCipherSuites(SSLSocketFactory sslSocketFactory) 
{
    ArrayList<String> suitesList = new ArrayList<String>(Arrays.asList(sslSocketFactory.getSupportedCipherSuites()));
    ArrayList<String> newList = new ArrayList<String>();
    for(String s : suitesList)
    {
        if(s.indexOf("ECDHE")!=-1)
            newList.add(s);
    }
    return newList.toArray(new String[newList.size()]);
}

private static String[] setupPreferredSupportedCipherSuites(SSLSocketFactory sslSocketFactory) 
{
    ArrayList<String> suitesList = new ArrayList<String>(Arrays.asList(sslSocketFactory.getSupportedCipherSuites()));
    ArrayList<String> newList = new ArrayList<String>();
    for(String s : suitesList)
    {
        if(s.indexOf("ECDHE")!=-1)
            newList.add(s);
    }
    return newList.toArray(new String[newList.size()]);
}
}
    PreferredCipherSuiteSSLSocketFactory objPrefCipher = new PreferredCipherSuiteSSLSocketFactory();
    HttpsURLConnection.setDefaultSSLSocketFactory(objPrefCipher);