gpt4 book ai didi

android - 对 Volley Android 网络库的 HTTPS 支持

转载 作者:太空狗 更新时间:2023-10-29 16:17:51 26 4
gpt4 key购买 nike

我有一个项目对 HTTPS 后端进行 REST 调用它在某些设备上运行良好,但在其他设备上会中断。

这是我得到的错误:

com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x78004ee8: Failure in SSL library, usually a protocol error error:140770FCSL routinesSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0x731f5d5c:0x00000000)

查看 Volley 文档,他们提到了

"You can include your own HTTPStack ( to handle SSL connections [...])"

有人这样做是为了 Volley 吗?如果是这样,您能否分享您的更改?

注意:证书由设备的可信证书中已有的有效实体签名。

最佳答案

这是我的解决方案:

在类 Volley 中的方法中

public static RequestQueue newRequestQueue(Context context, HttpStack stack)

找到以下文本:

stack = new HurlStack();

然后将这一行改为:

stack = new HurlStack(null, createSslSocketFactory());

其中方法 createSslSocketFactory() 定义如下:

private static SSLSocketFactory createSslSocketFactory() {
TrustManager[] byPassTrustManagers = new TrustManager[]{new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}

public void checkClientTrusted(X509Certificate[] chain, String authType) {
}

public void checkServerTrusted(X509Certificate[] chain, String authType) {
}
}};

SSLContext sslContext = null;
SSLSocketFactory sslSocketFactory = null;
try {
sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, byPassTrustManagers, new SecureRandom());
sslSocketFactory = sslContext.getSocketFactory();

} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
Log.e(TAG, StringUtils.EMPTY, e);
} catch (KeyManagementException e) {
Log.e(TAG, StringUtils.EMPTY, e);
}

return sslSocketFactory;
}

我知道这不安全,但我仅将其用于测试目的。您可以通过仅接受来自您的服务器的证书来提高安全性。

关于android - 对 Volley Android 网络库的 HTTPS 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22564317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com