Websocket服务器实现Android

时间:2016-10-20 07:05:40

标签: android java-websocket

我需要在Android中实现安全的Websocket服务器。我使用过https://github.com/TooTallNate/Java-WebSocket。这对于不安全的连接工作正常。但是,一旦我将webserversocket设置为安全,我就会获得SSL握手异常。有谁知道这个问题? 是否还有其他支持安全连接的websocket库。

这是代码

private void startSecureWss()抛出CertificateException,KeyStoreException,IOException,NoSuchAlgorithmException,UnrecoverableKeyException,KeyManagementException {

    InputStream caInput = null;
    try {
        caInput = new BufferedInputStream(getAssets().open("newCert.cert"));
    } catch (IOException e) {
        e.printStackTrace();
    }


    CertificateFactory certificateFactory = null;
    certificateFactory = CertificateFactory.getInstance("X.509");

    X509Certificate cert = null;
    cert = (X509Certificate) certificateFactory.generateCertificate(caInput);

    String alias = cert.getSubjectX500Principal().getName();


    KeyStore trustStore = null;
    trustStore = KeyStore.getInstance(KeyStore.getDefaultType());

    trustStore.load(null);

    trustStore.setCertificateEntry(alias, cert);

    KeyManagerFactory kmf = null;
    kmf = KeyManagerFactory.getInstance("X509");
    String password = "abcd123";

    kmf.init(trustStore, password.toCharArray());

    KeyManager[] keyManagers = kmf.getKeyManagers();


    TrustManagerFactory tmf = null;
    tmf = TrustManagerFactory.getInstance("X509");

    tmf.init(trustStore);
    TrustManager[] trustManagers = tmf.getTrustManagers();


    SSLContext sslContext = null;
    sslContext = SSLContext.getInstance("TLS");

    sslContext.init(keyManagers, trustManagers, null);

    mServer = new MySocketServer(new InetSocketAddress("127.0.0.1", 6663));
    mServer.setWebSocketFactory(new DefaultSSLWebSocketServerFactory(sslContext));

    mServer.start();
}

MySocketServer类

public class MySocketServer扩展了WebSocketServer {

private static String TAG=MySocketServer.class.getSimpleName();
private WebSocket mSocket;
private Activity mActivity;

public MySocketServer(InetSocketAddress address) {
    super(address);
    Log.i(TAG, "constructor");
}

public MySocketServer(int port) {
    super( new InetSocketAddress( port ) );
    Log.i(TAG, "constructor");
}

public void setActivity(Activity activity) {
    this.mActivity=activity;
}

@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
    mSocket = conn;
    Log.i(TAG, "onOpen");
}

@Override
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
    Log.i(TAG, "onClose");
}

@Override
public void onMessage(WebSocket conn, String message) {
    Log.i(TAG, "onMessage "+message);
    //((MainActivity)mActivity).setMessage(message);
    EventBus.getDefault().post(new MessageEvent(message));
    EventBus.getDefault().post(new SomeOtherEvent());
}

@Override
public void onError(WebSocket conn, Exception ex) {
    Log.e(TAG, "onError execption: "+ex);
}

public void sendMessage(String message) {
    Log.i(TAG, "sendMessage "+message);
    mSocket.send(message);
}

}

0 个答案:

没有答案