javax.net.ssl.SSLHandshakeException:连接由 com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(本机方法)处的对等方关闭

2024-03-25

在 api 级别 24 之前,我的代码工作正常,但在 api 级别 24(7.0 Nougat)上出现错误。我不明白我的代码出了什么问题。

第一种方法在这里:

 <?xml version="1.0" encoding="utf-8"?> <network-security-config>
   <base-config> <trust-anchors> <certificates src="system"/>
   <certificates src="user"/> </trust-anchors> </base-config>
   <domain-config> <domain includeSubdomains="true">xyz.com</domain>
   <trust-anchors> <certificates src="@raw/my_ca"/> </trust-anchors>
   </domain-config> </network-security-config>

清单文件内部:

android:network Security Config = "@xml/network_security_config"我已经包括了network_security_config inside res/xml/network_security_config and ca证书在里面res/raw/my_ca.pem

第二种方法在这里:

 import org.apache.http.client.HttpClient; 
 import org.apache.http.conn.ClientConnectionManager;  
 import org.apache.http.conn.scheme.Scheme; 
 import org.apache.http.conn.scheme.SchemeRegistry; 
 import org.apache.http.conn.ssl.SSLSocketFactory; 
 import org.apache.http.impl.client.DefaultHttpClient; 
 import java.io.IOException; import java.net.Socket; 
 import java.net.UnknownHostException; 
 import java.security.KeyManagementException; 
 import java.security.KeyStore;
 import java.security.KeyStoreException; 
 import java.security.NoSuchAlgorithmException; 
 import java.security.UnrecoverableKeyException; 
 import java.security.cert.CertificateException; 
 import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext;
 import javax.net.ssl.TrustManager; 
 import javax.net.ssl.X509TrustManager; 
    public class ExSSLSocketFactory extends SSLSocketFactory { 
      SSLContext sslContext = SSLContext.getInstance("TLS"); 
      public ExSSLSocketFactory(KeyStore truststore) throws 
         NoSuchAlgorithmException, KeyManagementException,KeyStoreException,
         UnrecoverableKeyException {
         super(truststore);
     TrustManager x509TrustManager = new X509TrustManager() { 
     public void checkClientTrusted(X509Certificate[] chain, String authType)  
     throws CertificateException {
     } public void checkServerTrusted(X509Certificate[] chain, String authType)    
     throws CertificateException {
      } public X509Certificate[] getAcceptedIssuers()
     { 
return null; 
} 
}; 
sslContext.init(null, new TrustManager[] {
     x509TrustManager }, null);
 } public ExSSLSocketFactory(SSLContext
     context) throws KeyManagementException, NoSuchAlgorithmException,
     KeyStoreException, UnrecoverableKeyException {
 super(null); 
sslContext = context; 
} @Override public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException,
     UnknownHostException {
 return sslContext.getSocketFactory().createSocket(socket, host, port,
     autoClose); 
} @Override public Socket createSocket() throws
     IOException {
 return sslContext.getSocketFactory().createSocket(); 
}
     public static HttpClient getHttpsClient(HttpClient client) { 
try{
     X509TrustManager x509TrustManager = new X509TrustManager() 
{ 
@Override
     public void checkClientTrusted(X509Certificate[] chain, String
     authType) throws CertificateException { }
 @Override public void
     checkServerTrusted(X509Certificate[] chain, String authType) throws
     CertificateException {
 }
 @Override public X509Certificate[]
     getAcceptedIssuers() { 
return null; 
}
 }; 
SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new
     TrustManager[]{x509TrustManager}, null); SSLSocketFactory
     sslSocketFactory = new ExSSLSocketFactory(sslContext);
     sslSocketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
     ClientConnectionManager clientConnectionManager =
     client.getConnectionManager(); SchemeRegistry schemeRegistry =
     clientConnectionManager.getSchemeRegistry();
     schemeRegistry.register(new Scheme("https", sslSocketFactory, 443));
     return new DefaultHttpClient(clientConnectionManager,
     client.getParams()); 
} catch (Exception ex) 
{ return null; 
} } }

建立 http 连接时:

public String CallWebService(String url, String soapAction, String envelope){


final HttpClient httpClient = ExSSLSocketFactory.getHttpsClient(new DefaultHttpClient());
    HttpParams params = httpClient.getParams();
    HttpConnectionParams.setConnectionTimeout(params, 150000);
    HttpConnectionParams.setSoTimeout(params, 150000);
    HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), true);
    HttpPost httppost = new HttpPost(url);
    httppost.setHeader("soapaction", soapAction);
    httppost.setHeader("Content-Type", "text/xml; charset=utf-8");

    String responseString = "";
    try
    {
        HttpEntity entity = new StringEntity(envelope);
        httppost.setEntity(entity);
        ResponseHandler<String> rh = new ResponseHandler<String>()
        {

            public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException
            {

                HttpEntity entity = response.getEntity();
                StringBuffer out = new StringBuffer();
                byte[] b = EntityUtils.toByteArray(entity);
                out.append(new String(b, 0, b.length));
                return out.toString();
            }
        };

        responseString = httpClient.execute(httppost, rh);
        Log.d("Response is here....", "responseString :  " + responseString);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    // close the connection
    httpClient.getConnectionManager().shutdown();
    return responseString;
}

我仍然收到错误:

javax.net.ssl.SSLHandshakeException:连接被对等方关闭 01-24 10:28:03.182 32251-474/com.neosoft.meconnect W/System.err:位于 com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(本机方法) 01-24 10:28:03.182 32251-474/com.neosoft.meconnect 带有系统错误:
在 com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357) 01-24 10:28:03.182 32251-474/com.neosoft.meconnect 带有系统错误:
在 com.android.okhttp.Connection.connectTls(Connection.java:235) 01-24 10:28:03.182 32251-474/com.neosoft.meconnect W/System.err:位于 com.android.okhttp.Connection.connectSocket(Connection.java:199) 01-24 10:28:03.182 32251-474/com.neosoft.meconnect W/System.err:位于 com.android.okhttp.Connection.connect(Connection.java:172) 01-24 10:28:03.182 32251-474/com.neosoft.meconnect W/System.err:位于 com.android.okhttp.Connection.connectAndSetOwner(Connection.java:367) 01-24 10:28:03.182 32251-474/com.neosoft.meconnect 带有系统错误:
在 com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:130) 01-24 10:28:03.182 32251-474/com.neosoft.meconnect 带有系统错误:
在 com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:329) 01-24 10:28:03.182 32251-474/com.neosoft.meconnect 带有系统错误:
在 com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246) 01-24 10:28:03.183 32251-474/com.neosoft.meconnect 带有系统错误:
在 com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457) 01-24 10:28:03.183 32251-474/com.neosoft.meconnect 带有系统错误:
在 com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:126) 01-24 10:28:03.183 32251-474/com.neosoft.meconnect 带有系统错误:
在 com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89) 01-24 10:28:03.184 32251-474/com.neosoft.meconnect 带有系统错误:
在 com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java) 01-24 10:28:03.184 32251-474/com.neosoft.meconnect 带有系统错误:
在 org.ksoap2.transport.ServiceConnectionSE.connect(ServiceConnectionSE.java:46) 01-24 10:28:03.184 32251-474/com.neosoft.meconnect 带有系统错误:
在 org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:68) 01-24 10:28:03.184 32251-474/com.neosoft.meconnect 带有系统错误:
在 srd.gshelp.GSSoapConWSDL.javaHit(GSSoapConWSDL.java:180) 01-24 10:28:03.184 32251-474/com.neosoft.meconnect W/System.err:位于 srd.gshelp.GSSoapConWSDL.access$0(GSSoapConWSDL.java:144) 01-24 10:28:03.185 32251-474/com.neosoft.meconnect W/System.err:位于 srd.gshelp.GSSoapConWSDL$TaskAsync.doInBackground(GSSoapConWSDL.java:215) 01-24 10:28:03.185 32251-474/com.neosoft.meconnect 带有系统错误:
在 srd.gshelp.GSSoapConWSDL$TaskAsync.doInBackground(GSSoapConWSDL.java:1) 01-24 10:28:03.185 32251-474/com.neosoft.meconnect 带有系统错误:
在 android.os.AsyncTask$2.call(AsyncTask.java:304) 01-24 10:28:03.185 32251-474/com.neosoft.meconnect W/System.err:位于 java.util.concurrent.FutureTask.run(FutureTask.java:237) 01-24 10:28:03.186 32251-474/com.neosoft.meconnect W/System.err:位于 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 01-24 10:28:03.186 32251-474/com.neosoft.meconnect 带有系统错误:
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 01-24 10:28:03.186 32251-474/com.neosoft.meconnect 带有系统错误:
在 java.lang.Thread.run(Thread.java:761) 01-24 10:28:03.187 32251-474/com.neosoft.meconnect W/System.err:已抑制: javax.net.ssl.SSLHandshakeException:连接被对等方关闭

请帮忙。 提前致谢。


确保您已设置启用 TLS从服务器端。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javax.net.ssl.SSLHandshakeException:连接由 com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(本机方法)处的对等方关闭 的相关文章

  • 如果我在 XML 布局中声明一个片段,如何将它传递为 Bundle?

    我有一个活动已替换为片段 该活动采用了一个 Intent 其中包含一些有关该活动应该显示哪些数据的额外信息 现在 我的 Activity 只是执行相同工作的 Fragment 的包装器 如果我使用标记在 XML 中声明该片段 如何将该捆绑包
  • 如何从 BroadcastReceiver 刷新 ListView?

    如果我打电话notifyDataSetChanged 在与我的 ListView 关联的自定义适配器上 所有视图都应该自行刷新 getView 将被调用 现在我有一个正在监听事件的 BroadcastReceiver 当事件触发时 List
  • “android.enableUnitTestBinaryResources”已弃用[重复]

    这个问题在这里已经有答案了 我刚刚更新了我的 Android Studio 现在当我构建我的项目时 我收到此错误 选项 android enableUnitTestBinaryResources 已弃用 这 当前默认值为 假 已从当前版本中
  • 如何查找 Android 上剩余的可用存储空间(磁盘空间)? [复制]

    这个问题在这里已经有答案了 我试图找出运行我的应用程序的 Android 手机上的可用磁盘空间 有没有办法以编程方式执行此操作 Thanks 示例 获取人类可读的大小 如 1 Gb 字符串内存 bytesToHuman totalMemor
  • android 表格内的可聚焦行

    我在 xml 中有一个 ScrollView 其中包括一个 TableLayout 我的问题是 每次我单击它时是否可以有一个可聚焦的行 这是我的 xml 代码
  • Glide:如何使用 Glide v4 调整 gif 大小并将其另存为文件?

    我想调整 gif 文件的大小并保存它 我尝试使用一些建议的方法 但这些方法给出了错误 后来我知道有些方法在 Glide 中已被弃用v4 byte bytes Glide with context asGif load url toBytes
  • Android 自定义对话框中的图标

    有没有一种方法可以在不使用 AlertDialog 方法的情况下在自定义对话框上设置图标 对话框有标题 但缺少漂亮的分隔线和设置图标的功能 但肯定有一种方法可以在不使用 AlertDialog 的情况下获得两者 您可以使用以下代码添加图标
  • 如何将数据从 SQLITE 数据库获取到 Android 中的数组?

    很确定这是一个简单的问题 但我对所有将从游标返回的数据适应不同视图的示例感到困惑 我只想运行原始查询并将返回的每一项数据放入浮点数组中 以便我稍后可以将它们添加起来 我需要为此使用什么 Thanks 当您查询数据库时 您仍然会有一个游标 但
  • Android searchView下拉菜单屏幕宽度

    情况 我的 appcompat 工具栏中有一个 searchview 小部件 允许通过 sqlitedatabase 提供自定义建议 Problem 我无法将下拉建议列表扩展到屏幕的整个宽度 最好的情况下 列表宽度几乎是屏幕的宽度 除了左侧
  • 如何允许另一个应用程序访问我的应用程序的数据目录?

    假设我有一个名为 A 的应用程序 其数据目录为 com example test 现在我想制作另一个名为 B 的应用程序来修改 com example test 中的某些内容 当然我知道两者必须共享相同的签名 但我还需要什么 基本上我正在尝
  • SignalR 与 android(Java) 有问题

    我想在 android 应用程序和 net core 服务器项目之间进行实时通信 我在 stackoverflow 中尝试了一个问题 我跟着这个one https stackoverflow com questions 32573823 h
  • 应用程序被终止时无法处理 FCM 消息

    我一直在阅读各种教程 其他 SO 线程以及官方 Android 开发人员和 Firebase 文档 但无济于事 我已经尝试了几乎所有的方法 但我已经耗尽了精力和时间 因为我正在修复以前可以工作但现在不再工作的通知系统 我正在使用 Azure
  • Android 是否可以同时使用前后摄像头[重复]

    这个问题在这里已经有答案了 我想同时使用设备的前置和后置摄像头 在我的应用程序中 屏幕的前半部分将显示后置摄像头的预览 屏幕的下半部分将显示前置摄像头的预览 我尝试过设置两个不同的相机预览 但是当我打开应用程序时 屏幕的前半部分 显示后置相
  • TextView ClickableSpan 按下状态的样式[重复]

    这个问题在这里已经有答案了 我对 ClickableSpan 进行子类化 以自定义 TextView 中链接的文本样式 private static class LinkSpan extends ClickableSpan Override
  • 蓝牙连接;无法正确发送字符串

    当我需要将字符串从服务器蓝牙套接字发送到客户端蓝牙套接字时 我的程序遇到了麻烦 只要我一次只发送一个字符串 例如聊天 一切都可以正常工作 但是如果我需要在短时间内编写更多字符串 以交换信息 则字符串将不会与客户端代码分离 例如 如果我发送
  • 获取 Search.List 中的 ViewCount - Youtube 数据 API v3

    最近 我与youtube API v3 for Android I use 搜索列表 https developers google com youtube v3 docs search list当我想从关键字检 索视频列表时 我可以从结果
  • GreenDao交易

    我在用着GreenDao存储大量数据 来自休息服务 我的很多实体都与关系相关 一切都很顺利 但明天我必须实施坚如磐石的工作流程 当我加载数据时我必须检查是否发生错误 如果是这样 我必须确保没有存储任何内容在 SQLite 数据库中 通常我会
  • 始终启动没有历史记录的新活动实例

    有没有办法将活动作为没有历史记录的新实例启动 在清单文件中尝试了以下内容 android launchmode singleinstance android noHistory true 我能够实现我所需要的 但是一旦屏幕锁定 就会显示之前
  • 在 Android 中使用新的“manifestmerger”属性

    在最新版本的 ADT 版本 20 预览版 3 中 他们说可以使库的清单文件与使用它们的项目合并 自动将库项目清单文件合并到包含文件中 项目的清单 使用manifestmerger enabled 属性启用 我如何以及在哪里使用它 我在任何地
  • Pinterest 喜欢自定义 GridView

    我是 Android 新手 我正在寻找网格视图的逻辑 例如为 iPhone 构建的 pinterest homescreen 应用程序 一个大号 图像来自服务器 我需要以以下形式显示并具有分页效果 即在滚动上加载图像 如果可以的话请回复 我

随机推荐