问题标签 [handshake]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1795 浏览

safari - 握手在 Safari 上不起作用,但在 Chrome 上有效

我在尝试测试 websocket 应用程序时发现了一个问题。我的服务器是用 Delphi 7 编写的,我尝试将客户端浏览器连接到它。

我知道 Chrome 使用“draft-ietf-hybi-thewebsocketprotocol-06”协议,而 Safari 使用“draft-ietf-hybi-thewebsocketprotocol-00”协议。所以,我已经为两者做了细节。

所以,当我在 Chrome 上运行客户端代码时,它工作正常,我得到了浏览器接受的握手。之后,我可以向双方发送和接收消息。

但是,当我使用 Safari 浏览器运行相同的客户端代码时,它根本不起作用。我从服务器上的浏览器中获得了握手,如下所示:

所以,我的服务器回答:

看来一切都OK了!但是客户端不接受答案并立即关闭连接。

我首先想到的是我对 Safari 的握手回答有问题(draft-ietf-hybi-thewebsocketprotocol-00)。但是,在网上搜索时,我找到了 WebSocket.org 网站,其中有“回声测试”(http://www.websocket.org/echo.html)。我发现的最好奇的,做正常的测试,Chrome 和 Safari 都运行良好。但是,保存页面上的示例代码并在本地运行它,甚至连接到 WebSocket 服务器,Safari 也无法正常工作。所以,我想 Safari 会有所不同。请任何人都可以保存下面的代码并将其运行到两个浏览器(Safari 和 Chrome)中并检查它是否适用于两者?而且,有人知道会发生什么吗?

谢谢!

0 投票
1 回答
1234 浏览

html - 我想在客户端检查“Sec-WebSocket-Accept”

我正在制作 websocket 的 C 服务器:D 实际上有一次我确实连接成功,但在那之后,这个 onOpen 不再触发......并告诉我

所以现在我需要检查客户端 HTML 需要什么,尤其是该Sec-WebSocket-Accept字段

有没有办法可以Sec-WebSocket-Accept在 javascript 客户端检查字段?我应该检查什么值?

0 投票
1 回答
440 浏览

php - PHP WebSocketServer 无法连接到 WebKit (Safari)

我用 PHP 编写了一个 WebSocket 服务器,它可以很好地连接到 Firefox,但不能连接到 Safari。我想,握手有问题。Safari 需要较旧的草稿 hybi00... 但我找不到错误:/

尝试连接后,连接直接在 Safari 中关闭。在此先感谢您的帮助!

0 投票
1 回答
3728 浏览

c++ - InitializeSecurityContext (Schannel) 的 TLS 握手过程

我必须使用 SSPI 接口实现 TLS 握手过程。
我的应用程序实现了客户端,正如我从这里看到的一般流程是:

  1. InitializeSecurityContext - 第一次调用返回一个指向 SecBufferDesc 结构的指针。
  2. 使用输出缓冲区调用发送(=WinSock API) 函数。
  3. 调用recv函数
  4. 使用缓冲区再次调用 InitializeSecurityContext。

关于这些缓冲区的MSDN解释:

“在初始调用后调用此函数时,必须有两个缓冲区。第一个缓冲区的类型为 SECBUFFER_TOKEN,包含从服务器接收到的令牌。第二个缓冲区的类型为 SECBUFFER_EMPTY;将 pvBuffer 和 cbBuffer 成员都设置为零。”

我的问题:

  1. 我需要更多解释:缓冲区的含义是什么?第二个缓冲区包含什么?它们是干什么用的?
  2. 在 MSDN 中写到 InitializeSecurityContext 函数的 TargetDataRep 输入参数是用于 Schannel 的坚果,但我看到的许多示例将其设置为 SECURITY_NATIVE_DREP。什么是 SECURITY_NATIVE_DREP 标志?为什么 MSDN 说将其设置为零?

我将非常感谢任何帮助。
谢谢!。

0 投票
1 回答
7486 浏览

java - 握手期间恢复缓存会话时出现 SSLException

可能重复:
SSL 握手警报:自升级到 Java 1.7.0 后出现 unrecognized_name 错误

我的 J2SE 应用程序使用 HttpsUrlConnection 访问安全位置。在我将 JRE 更新到 1.7 之前,它曾经工作得很好。现在我得到“握手期间远程主机关闭连接”SSLException。在 JRE 1.6 和 JRE 1.7 下使用 -Djavax.net.debug=ssl:handshake 运行应用程序后,我的印象是在 1.7 下缓存的客户端会话无法恢复。

更新:我已经了解到,在 JRE 1.6 下,我的客户端应用程序使用 SSLv2Hello 封装。但是在 JRE 1.7 下它不会这样做,这很可能是导致异常的原因。我现在的问题是:如何为在 JRE 1.7 上运行的客户端启用 SSLv2Hello 封装?

更新#2:SSLv2Hello 在 JRE 7 上通过 System.setProperty("https.protocols", "TLSv1,SSLv2Hello") 完成。然而,这并没有使握手异常消失。事实证明,异常的真正原因是密码套件。在 JRE 6 上,服务器从客户端的选项中选择 SSL_RSA_WITH_RC4_128_MD5,而在 JRE 7 上,它始终使用 TLS_DHE_RSA_WITH_AES_128_CBC_SHA。由于某种原因,服务器无法使用 TLS_DHE_RSA_WITH_AES_128_CBC_SHA 恢复缓存会话。使用 System.setProperty("https.cipherSuites",SuggestedCipherSuites) 修补的问题,其中SuggestedCipherSuites 始终以 SSL_RSA_WITH_RC4_128_MD5 开头。这种方法有什么缺点吗?

更新#3:客户端的 SNI 扩展是困扰服务器的问题。请参阅http://docs.oracle.com/javase/7/docs/technotes/guides/security/enhancements7.html上的“JSSE 客户端的服务器名称指示 (SNI)”

0 投票
1 回答
1331 浏览

java - 使用 rxtxComm 处理 RS232 DB9 中的握手线

我使用 rxtxComm 与 A​​rduino(USB 串行端口)进行通信(发送和接收数据)。如何使用 rxtxComm 库处理像 DTR 这样的握手线?你能给我一些关于这个的教程或一些示例代码吗???

  • 注意:我使用的是win7操作系统。我今天(21-4-2012)买了一个 USB-Serial(DB9)适配器;计划将 LED 阵列直接连接到 rs232...
0 投票
1 回答
14954 浏览

web-services - javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure

我将使用服务器人员开发和托管的某个 Web 服务。涉及 SSL,客户端是 Axis 1x,并且证书不是来自受信任的 CA。

我想,我已经满足了所有需要,比如创建自定义密钥库、拥有自定义 SocketFactory 和自定义 TrustManager;但我仍然不断收到handshake_failure。

这是我到目前为止所做的:

我的代码摘录:

一个测试 JSP,它具有:

服务员只为我提供以下信息:

并报告:

访问日志:

错误日志:

请求日志:

最后,SSL 调试的某些部分(我从开头删除了一些打印证书信息的行。顺便说一句,所述证书“确实”显示在 SSL 调试中):

  • 我尝试评论 allowUnsafeRenegotiation 或将其设置为 true/false
  • 启用或注释掉 setEnabledCiphers
  • 将提供的客户端证书导入默认密钥库而不是自定义密钥库
  • SSLContext.getInstance("TLS") 以及 "SSL"
  • SSLSocket::setEnabledProtocols 与 SSLv3、TLSv1 和此类组合。
  • 重新进行整个 keytool 操作

仍然没有运气。我陷入了同样的错误 - 从现在开始 3 天!

将不胜感激在这方面的任何帮助。

TIA。

0 投票
1 回答
455 浏览

ssl - SSL serverhello 消息中的未指定字节

在 SSL 3.0 握手期间,服务器使用以下 serverhello 消息响应

我对这个回复的理解如下:

但我不明白最后 7 个字节应该如何解释:00 05 ff 01 00 01 00

0 投票
1 回答
754 浏览

java - 注册接收 SSLSocket 握手完成的事件通知

根据SSLSocket 上的文档

您可以注册以接收握手完成的事件通知。

你为什么不注册这个?SSLSocket.startHandshake() 在没有 SSLException 发生的情况下成功的事实是否确保证书是可信的?或者您是否通过等待握手完成来获得一些额外的保证?

0 投票
3 回答
2618 浏览

c++ - Sha1 的 C++ Base64 - WebSocket 握手

我目前正在尝试运行可以与 WebSocket 通信的 C++ 服务器。HandShake 由几个步骤组成,最后一个步骤我没有成功。

第一步是生成一个 SHA1 编码的字符串,我成功获得了正确的十六进制字符串。(例如http://en.wikipedia.org/wiki/WebSockethttps://www.rfc-editor.org/rfc/rfc6455)。

我的输出在这两种情况下都与文档中所述相同:

所以这是对的。当我现在进行 Base64 编码时,我得到以下结果:

而这完全不同。我确认我的 Base64 算法适用于某些在线转换器,并且它们都产生了我的服务器所做的输出。所以问题是输入格式。我在一个 javascript 论坛中找到了一个论坛条目,其中一个有同样的问题,答案是,我们应该传递 20 个字符的二进制表示,而不是传递 40 个字符的十六进制字符串。

我知道 openssl SHA1 返回二进制表示,但由于某些原因我不能使用该库。我使用的 SHA1 库将编码的输出放在一个 int 数组中。输出如下所示(IETF 示例):

我把它转换成这样的十六进制:

现在是个大问题。如何将我的十六进制字符串转换为二进制?

非常感谢提前。马库斯

编辑

如果有人对代码感兴趣: https ://github.com/MarkusPfundstein/C---Websocket-Server