握手をしなければなりません。私は以下のコードでそれを行います。
アプレットでコードを実行していますが、サーバーに対して直接実行すると問題なく動作します。私が抱えている問題は、同じコードがプロキシ経由で実行されたときに発生します。トレース レベル 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);
}
}
}