我正在尝试用 Java 构建一个独立的 WebSocket 客户端,该客户端连接到 C# 中的 WebSocket 服务器。我正在使用为 WebSocket 服务器生成的自签名证书。我可以使用 WSS 连接到 Chrome 浏览器中的 WebSocket 服务器,没有任何问题。当尝试使用TooTallNate/Java-WebSocket库时,它不起作用。连接后立即调用 OnClose 方法。
我在生成的 *.pfx 文件中拥有一个自签名证书,用于 C# 服务器并导入到我的受信任根存储中。我使用 keytool 从该文件创建了 *.jks (我认为我已经正确完成了此操作)。我正在使用 keystore.jks,它是由 keytool 在我的代码中生成的。
这是我的主要方法:
public static void main(String[] args) throws Exception {
ChatClient chatclient = new ChatClient("wss://thomas.localnetwork.com:65120/wsserver?userId=Thomas", "Thomas", "1", "1", "L");
// load up the key store
String STORETYPE = "JKS";
String KEYSTORE = "C:\\Users\\thomas\\Desktop\\keystore.jks";
String STOREPASSWORD = "test12345";
String KEYPASSWORD = "test";
KeyStore ks = KeyStore.getInstance( STORETYPE );
File kf = new File( KEYSTORE );
ks.load( new FileInputStream( kf ), STOREPASSWORD.toCharArray() );
KeyManagerFactory kmf = KeyManagerFactory.getInstance( "SunX509" );
kmf.init( ks, KEYPASSWORD.toCharArray() );
TrustManagerFactory tmf = TrustManagerFactory.getInstance( "SunX509" );
tmf.init( ks );
SSLContext sslContext = null;
sslContext = SSLContext.getInstance( "TLS" );
sslContext.init( kmf.getKeyManagers(), tmf.getTrustManagers(), null );
// sslContext.init( null, null, null ); // will use java's default key and trust store which is sufficient unless you deal with self-signed certificates
SSLSocketFactory factory = sslContext.getSocketFactory();// (SSLSocketFactory) SSLSocketFactory.getDefault();
chatclient.setSocketFactory( factory );
chatclient.connectBlocking();
BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );
while ( true ) {
String line = reader.readLine();
if( line.equals( "close" ) ) {
chatclient.closeBlocking();
} else if ( line.equals( "open" ) ) {
chatclient.reconnect();
} else {
ucm.send( line );
}
}
}
有什么方法可以让我获得有关握手的更多详细信息或实际问题是什么?异常堆栈跟踪似乎根本没有帮助。
呼唤远方
相关分类