当前位置: 首页 > 知识库问答 >
问题:

javax.net.SSL.SSLProtocolException:SSL握手中止:SSL=0x7FA2258640:SSL库失败,通常是协议错误

方玄天
2023-03-14

我正在尝试一个演示Android应用程序连接servlet(本地服务器和aws实例),它给出了握手失败的错误。我也尝试过volley和http客户端。相关代码和logcat结果如下。目前我使用的是Android7.1版本和红米5A手机进行测试。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        execute();
    }

    void execute() {
        new Thread(new Runnable() {
            public void run() {
                try {
            URL url = new URL("https://192.168.0.7:9999/WebS/welcome/test");
            URLConnection connection = url.openConnection();

            String inputString = "hello server";
            //inputString = URLEncoder.encode(inputString, "UTF-8");

            Log.d("inputString", inputString);

            connection.setDoOutput(true);
            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
            out.write(inputString);
            out.close();

            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            Toast.makeText(MainActivity.this, in.toString(), Toast.LENGTH_LONG).show();

            in.close();
        } catch (Exception e) {
            Log.e("YOUR_APP_LOG_TAG", "I got an error", e);
        }
    }
}).start();}}

Logcat结果:

共有1个答案

苏晓博
2023-03-14
URL url = new URL("https://192.168.0.7:9999/WebS/welcome/test");

此url还包含端口规范(端口9999)。确保您的SSL服务器实例(HTTPS协议)配置为在该端口侦听,可能您错误地连接到服务器的非SSL实例(HTTP协议)。

例如,尝试insecureurl url=new url(“HTTP://192.168.0.7:9999/webs/welcome/test”);查看该地址上的通信是否使用HTTP协议工作。如果是,则需要连接到不同的HTTPS端口。最简单的方法是首先使用默认SSL端口(443)进行尝试,即只需删除端口号:url url=新url(“https://192.168.0.7/webs/welcome/test”);

你也可以在你最喜欢的浏览器中尝试所有这些url变量,看看它是怎么想的(我个人使用的是firefox,端口指向HTTP的url确实产生了关于错误证书长度的奇怪错误,等等)。当我将url固定为指向HTTPS实例时,firefox确实报告了由于使用了自签名证书而导致的不安全连接,这是意料之中的,也是可以理解的。

正确的HTTPS url,如果没有进一步的额外配置移动应用程序,可能会失败,javax.net.ssl.sslHandShakeException:java.security.cert.CertPathValidateXception:未找到证书路径的信任锚。-如果您使用的是本地服务器的自签名证书。这是一个不同的问题,有大量的文档如何处理(以及总体上如何定位证书、检查域名和创建安全连接)。

但是wrong_version_number(external/boringssl/src/SSL/tls_record.c:提示您无意中连接到服务器的未加密HTTP实例,那么SSL握手就完全混乱了。

 类似资料:
  • 我正在运行本地服务器(android应用程序中的嵌入式https服务器),它使用。bks(自签名证书类型)。当android应用程序尝试使用ssl连接时,会出现以下错误。在这里,您还可以看到服务器日志,其中打印了启用的密码套件以及启用的协议。当我尝试使用java执行相同的测试用例时,一切都很好。只是,android出现了问题。任何帮助都将不胜感激。Android 7.0版Min SDK:22

  • 我正在学习SSL通信,我遇到了这个问题。我正在编写一个简单的客户端,它试图与本地apache服务器握手。服务器启用https。我将服务器证书添加到所有可能的信任存储(jdk中的一个 注意:我从以下教程中获取了代码: http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#KRB 停留

  • 我通过受ssl v3保护的cxf使用soap服务。我从服务器下载.cer文件,并通过keytool使用以下指令创建JKS文件: 在java代码中,我将此代码用于客户端配置: 对于调用此代码的服务: 当我运行代码时,会发生此错误: 我搜索此错误,我意识到该错误是针对不良信任存储的。但我不知道如何生成正确的信任库。

  • 问题内容: 我正在尝试将Jenkins CI配置为对我们的项目执行持续集成,并且无法使其通过https连接到我们的SVN存储库。每当我尝试配置存储库URL并尝试连接时,都会遇到以下异常: 我在tomcat实例上启用了SSL调试(使用),并得到了以下信息: 我尝试按照这篇文章中的说明在tomcat中添加属性,但仍然出现相同的错误。 在这一点上,我对发生的事情完全感到困惑。不幸的是,我不是完全了解SS

  • 问题内容: 我已经将证书导入到信任库中,但是仍然无法成功连接到该URL。我已经尝试了所有方法,任何人都可以看到输出并提供帮助吗? 无法弄清楚这是什么,应用程序正在使用java1.6,但是SSLPoke无法通过两种情况 问题答案: 我发现客户也进行了验证。因此它是2路身份验证。客户还必须将我的公共证书导入其密钥库。

  • iOS 9 beta 1版有人遇到过这个问题吗? 我使用标准的NSURLConnection连接到一个Web服务,一旦调用该Web服务,我就会得到以下错误。这项功能目前在iOS 8.3中运行 可能是beta bug?任何想法都会很棒!我知道这是iOS 9开发的早期阶段 以下是完整的错误: CFNetwork SSL握手失败(-9824)NSURL会话/NSURLConnection HTTP加载失