Java 握手完成后立即取消WSS握手事件
我正在尝试用Java编写WSS服务器代码:Java 握手完成后立即取消WSS握手事件,java,javascript,ssl,websocket,Java,Javascript,Ssl,Websocket,我正在尝试用Java编写WSS服务器代码: String certificateName = "keystore"; String path = "C:\\Users\\Black\\Desktop\\" + certificateName + ".jks"; char[] passphrase = "123456".toCharArray(); KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keySt
String certificateName = "keystore";
String path = "C:\\Users\\Black\\Desktop\\" + certificateName + ".jks";
char[] passphrase = "123456".toCharArray();
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(new FileInputStream(path), passphrase);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(keyStore, passphrase);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(kmf.getKeyManagers(), null, null);
SSLServerSocketFactory sslserversocketfactory = ctx.getServerSocketFactory();
serverSocket = (SSLServerSocket) sslserversocketfactory.createServerSocket(port);
serverSocket.setEnabledProtocols(new String[] { "TLSv1", "TLSv1.1","TLSv1.2", "SSLv3" });
clientSocket = (SSLSocket) serverSocket.accept();
clientSocket.addHandshakeCompletedListener(new HandshakeCompletedListener() {
@Override
public void handshakeCompleted(
HandshakeCompletedEvent arg0) {
System.out.println(arg0.toString());
}
});
out = clientSocket.getOutputStream();
outPrint = new PrintWriter(out, true);
reader = new Reader(this, clientSocket.getInputStream());
reader.start();
在控制台中,它正在打印出HandshakeCompletedEvent
,然后立即断开连接(bufferedinputreader.read()
返回-1)
我的客户在JS
var serviceUrl = 'wss://localhost:9898/';
var protocol = 'AX1';
var socket = new WebSocket(serviceUrl, protocol);
socket.onopen = function () {
console.log('Connection Established!');
setInterval(test(socket), 1000);
};
socket.onclose = function () {
console.log('Connection Closed!');
};
socket.onerror = function (error) {
console.log('Error Occured: ' + error);
};
socket.onmessage = function (e) {
var obj = JSON.parse(e.data);
console.log("Type: " + obj.type + " | Specific: "+obj.specific);
};
返回:
WebSocket connection to 'wss://localhost:9898/' failed: WebSocket opening handshake was canceled
Error Occured: [object Event]
密钥库是自签名的,并使用生成的java密钥工具。我无法找出错误,因为我没有得到任何异常
客户端使用了正确的协议/密码套件,因为我在
socket.accept()
之后打印出了它们。您知道这一点吗?@Nate是的,问题是SSL证书。您的浏览器需要接受它(如果您的bowser不接受它,则没有错误…)。我的解决方案是一个经过验证的SSL证书,但您可以尝试在浏览器中验证您的证书。