android async http 添加ssl,java - AndroidAsync如何在websocket连接中创建SSL客户端? - 堆栈内存溢出...

这篇博客探讨了如何在Android应用中创建一个使用自签名SSL证书的WebSocket客户端,以及遇到的SSLException问题。代码示例展示了服务器端和客户端的实现,包括自定义的SSLContext和TrustManager。然而,在尝试连接时,遇到了‘握手期间套接字关闭’的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有个问题。 如何使用自签名创建SSL websocket客户端。

mServer = new AsyncHttpServer();

mServer.websocket("/get", new AsyncHttpServer.WebSocketRequestCallback() {

@Override

public void onConnected(final WebSocket webSocket, AsyncHttpServerRequest request) {

_sockets.add(webSocket);

webSocket.setClosedCallback(new CompletedCallback() {

@Override

public void onCompleted(Exception ex) {

try {

if (ex != null)

Log.e("WebSocket", "Error");

} finally {

_sockets.remove(webSocket);

}

}

});

webSocket.setStringCallback(new WebSocket.StringCallback() {

@Override

public void onStringAvailable(final String s) {

runOnUiThread(new Runnable() {

@Override

public void run() {

Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();

}

});

if ("Hello Server".equals(s))

webSocket.send("Welcome Client!");

else

webSocket.send(s);

}

});

btnTest.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

webSocket.send("I am server!!!");

}

});

}

});

// mServer.listen(8080);

SSLContext sslContext = null;

MySSLContext mySSLContext = new MySSLContext();

try {

sslContext = mySSLContext.getSSLContext();

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (KeyManagementException e) {

e.printStackTrace();

}

mServer.listenSecure(8080, sslContext);

我的服务器编码

public SSLContext getSSLContext() throws NoSuchAlgorithmException, KeyManagementException {

SSLContext sslContext = SSLContext.getInstance("SSL");

sslContext.init(null, new TrustManager[]{ new X509TrustManager() {

@Override

public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

}

@Override

public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

}

@Override

public X509Certificate[] getAcceptedIssuers() {

return null;

}

}}, new SecureRandom());

return sslContext;

}

获取SSLContext方法

AsyncHttpClient client = AsyncHttpClient.getDefaultInstance();

AsyncSSLSocketMiddleware sslSocketMiddleware = new AsyncSSLSocketMiddleware(client);

MySSLContext mySSLContext = new MySSLContext();

SSLContext sslContext = null;

try {

sslContext = mySSLContext.getSSLContext();

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (KeyManagementException e) {

e.printStackTrace();

}

sslSocketMiddleware.setSSLContext(sslContext);

client.insertMiddleware(sslSocketMiddleware);

client.websocket("https://192.168.88.11:8080/get", null, new AsyncHttpClient.WebSocketConnectCallback() {

@Override

public void onCompleted(Exception ex, WebSocket webSocket) {

if (ex != null) {

ex.printStackTrace();

return;

}

webSocket.setStringCallback(new WebSocket.StringCallback() {

@Override

public void onStringAvailable(final String s) {

runOnUiThread(new Runnable() {

@Override

public void run() {

Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();

}

});

Log.d("StringCallback", s);

}

});

webSocket.send("Hello Server");

webSocket.setClosedCallback(new CompletedCallback() {

@Override

public void onCompleted(Exception ex) {

Log.d(TAG, "Closed/onCompleted:" + ex.getMessage());

}

});

webSocket.setEndCallback(new CompletedCallback() {

@Override

public void onCompleted(Exception ex) {

Log.d(TAG, "End/onCompleted:" + ex.getMessage());

}

});

}

});

这是我的客户编码

然后,我得到了

javax.net.ssl.SSLException:握手期间套接字关闭..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值