SSLSocketFactory.createSocket使用http连接而不是https
问题描述:
我需要进行握手。我用下面的代码来做。SSLSocketFactory.createSocket使用http连接而不是https
我正在applet中运行代码,并且在直接对服务器运行时工作正常。当通过代理运行相同的代码时,会出现问题。 我在跟踪级别5激活的Java控制台中查找。直接在代码行“SSLSocket socket =(SSLSocket)factory.createSocket(”www.theserver.com“,443);”被执行 这一行出现在java控制台“网络:连接http://www.theserver.com:443与代理=直接”。在此之后,小程序停止工作。我认为这是因为 代理将不会允许端口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);
}
}
}
答
我知道这是有点晚了,但我们有完全相同的问题,只是能解决这个问题。问题出在客户端上,在Java控制面板的高级选项卡上选中了“使用SSL 2.0兼容的ClientHello格式”。在客户端取消选中此框,它将正确连接。
我想我正在寻找相同的答案。 – 2013-07-26 18:48:50