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

如何处理服务器未启用SSL/TLS但客户端在Java中启用SSL/TLS的负面测试案例

东方玉泽
2023-03-14

我有一个启用SSL的客户端,但不是我的服务器。

背景:所以我想做的是,

客户端:

  1. 客户端尝试连接到服务器
  2. 尝试写入流中
  3. 读取服务器写入的数据
  4. 关闭康涅狄格州

服务器端:

  1. 服务器接受TCP连接
  2. 尝试将客户端写入的数据读取到流中
  3. 将回复写回客户端
  4. 关闭康涅狄格州

实际发生的情况是,服务器开始监听端口,然后客户端在握手进入画面之前连接到服务器。

连接到服务器意味着客户端执行以下操作

SSLSocket sock = (SSLSocket)sslsocketfactory.createSocket(remoteAddress, port);

并且服务器接受使用,

ServerSocket.accept();

I/e ClientSide和ServerSide步骤1

到目前为止,握手还没有被触发。

现在,当客户端尝试写入流时,在握手触发之前。

i、 e客户端现在已进入步骤2

我分析了WireShark中的数据包,客户端向客户端发送Hello。现在,由于服务器未启用SSL,它在从客户端读取数据时被卡住/暂停,而客户端被卡住是因为它在等待服务器Hello消息。

最终双方都超时了,但实际上应该如何处理呢。

共有2个答案

傅新
2023-03-14

您的客户端正在尝试通过TCP套接字启动SSL握手。如果您想要使用SSL(证书和密码套件)的安全TCP连接,这是很好的。但您还需要一个知道如何使用SSL进行通信的服务器。看这里。

基本上,您的服务器是一个“裸”TCP服务器,对SSL一无所知。因此,当您的SSL客户端尝试连接到服务器时,它会启动正常的SSL握手(客户端使用密码套件发送你好)。服务器接收此数据,但它对它没有任何特殊意义,因此它不响应SSL服务器应该如何响应(服务器用自己的密码套件和证书响应你好)。因此,当客户端等待响应时,它最终会超时。

解决方案要么将您的服务器更改为上面链接的SSLSocketServer(如果您想要安全的SSL连接并拥有证书,请选择),要么将客户端更改为普通套接字客户端

周龙光
2023-03-14

最终双方都超时了,但实际上应该如何处理呢。

如果客户机不知道服务器不讲TLS,那么如果服务器没有响应,那么对于客户机来说,没有比在一段时间后超时更好的方法了。服务器可能会尝试提前检查客户端发送的数据是否属于预期的协议。这对于HTTP是可能的,因为ClientHello的前几个字节看起来与有效HTTP请求的开头完全不同。类似的启发式算法也可能适用于其他应用程序协议,但并非适用于所有应用程序协议。

 类似资料:
  • 问题内容: 尝试使用go与postgres数据库通信,准备如下语句: 引发以下错误: 有什么办法吗? 如果需要,我可以添加更多信息。 问题答案: 您应该建立没有SSL加密的数据库连接,如下所示:

  • 我正在使用T.Rob的建议调试Websphere MQ服务器和客户机之间的SSL错误,并需要帮助理解SSL握手(SSL连接到MQ使用。NET MQ客户机SSLv3?)。 我的WMQ7.5客户机应用程序是C代码,使用密钥库(.kdb)。利用WebSphere管理员提供的CHLTAB。WMQ服务器运行Java,通道是用相互身份验证定义的。 本文指出,在SSL/TLS握手中,服务器总是发送其公共证书以响

  • gRPC新手,找不到任何关于如何在服务器端启用SSL的例子。我使用openssl生成了一个密钥对,但是它报错说私钥无效。 这是我的代码

  • 我已经阅读了stackoverflow中的相关问题。然而,答案只告诉如何配置身份验证检查。我需要在spring boot中用rsocket加密所有传输的数据。如何在带有SSL/tls的spring boot中使用tls。在如下所示初始化rsocket客户端时,我找不到任何受支持的方法,尽管我知道rsocket-it本身可以支持SSL/TLS。我发现了一些例子:

  • 本文主要描述了在 Kubernetes 上如何为 TiDB 集群的 MySQL 客户端开启 TLS。TiDB Operator 从 v1.1 开始已经支持为 Kubernetes 上 TiDB 集群开启 MySQL 客户端 TLS。开启步骤为: 为 TiDB Server 颁发一套 Server 端证书,为 MySQL Client 颁发一套 Client 端证书。并创建两个 Secret 对象,

  • 问题内容: 我正在使用node.js的WSwebsocket库。目前,我正在运行ws服务器。现在,我想通过使用安全连接(即通过实施wss协议以及库支持TLS连接)来保护此连接。我进行了一些搜索,发现这很容易确保安全:wss和具有自签名证书的wss。 两者都不是很详细,第二个链接上的文章介绍了带有自签名证书的wss。我想知道的是,仅创建自签名证书并部署到我的生产环境是否就足够了?还是我需要像创建HT