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

我正在尝试用Java编写WSS服务器代码:

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证书,但您可以尝试在浏览器中验证您的证书。