【问题标题】:SSLSocketFactory.createSocket connects using http instead of httpsSSLSocketFactory.createSocket 使用 http 而不是 https 连接
【发布时间】:2013-03-23 20:45:04
【问题描述】:

我需要握手。我用下面的代码来做。

我在一个小程序中运行代码,直接在服务器上运行时它运行良好。当相同的代码通过代理运行时,就会出现我遇到的问题。 我正在查看激活了跟踪级别 5 的 Java 控制台。直接在代码行“SSLSocket socket = (SSLSocket) factory.createSocket("www.theserver.com", 443);"之后被执行 此行出现在 java 控制台“network: Connecting http://www.theserver.com:443 with proxy=DIRECT”中。在此之后,小程序停止工作。我认为这是因为 代理将不允许端口 443 上的 http 流量。

谁能告诉我为什么它使用 http 连接以及我应该怎么做才能使它使用 https 连接?

import javax.net.ssl.HandshakeCompletedEvent; 
import javax.net.ssl.HandshakeCompletedListener; 
import javax.net.ssl.SSLSocket; 
import javax.net.ssl.SSLSocketFactory; 

public class Handshake 
{ 

    class MyHandshakeListener implements HandshakeCompletedListener 
    { 

        public void handshakeCompleted(HandshakeCompletedEvent e) 
        { 
            System.out.println("Handshake succesful!"); 
            System.out.println("Using cipher suite: " + e.getCipherSuite()); 
        } 
    } 

    public void DoHandshake() 
    { 
        try 
        { 
            SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
            SSLSocket socket = (SSLSocket) factory.createSocket("www.theserver.com", 443); 
            String[] suites = socket.getSupportedCipherSuites(); 
            socket.setEnabledCipherSuites(suites); 
            socket.addHandshakeCompletedListener(new MyHandshakeListener()); 
            socket.startHandshake(); 
        } 
        catch (Exception e) 
        { 
            System.out.println(e); 
        } 

    } 
} 

【问题讨论】:

  • 我想我正在寻找相同的答案。

标签: http https handshake


【解决方案1】:

我知道这有点晚了,但我们遇到了完全相同的问题并且能够解决它。问题出在客户端上,在 Java 控制面板的高级选项卡上选中了“使用 SSL 2.0 兼容的 ClientHello 格式”。在客户端取消选中此框,它将正确连接。

【讨论】:

    猜你喜欢
    • 2012-11-16
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 2014-08-12
    相关资源
    最近更新 更多