问题标签 [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.
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)中并检查它是否适用于两者?而且,有人知道会发生什么吗?
谢谢!
html - 我想在客户端检查“Sec-WebSocket-Accept”
我正在制作 websocket 的 C 服务器:D 实际上有一次我确实连接成功,但在那之后,这个 onOpen 不再触发......并告诉我
所以现在我需要检查客户端 HTML 需要什么,尤其是该Sec-WebSocket-Accept
字段
有没有办法可以Sec-WebSocket-Accept
在 javascript 客户端检查字段?我应该检查什么值?
php - PHP WebSocketServer 无法连接到 WebKit (Safari)
我用 PHP 编写了一个 WebSocket 服务器,它可以很好地连接到 Firefox,但不能连接到 Safari。我想,握手有问题。Safari 需要较旧的草稿 hybi00... 但我找不到错误:/
尝试连接后,连接直接在 Safari 中关闭。在此先感谢您的帮助!
c++ - InitializeSecurityContext (Schannel) 的 TLS 握手过程
我必须使用 SSPI 接口实现 TLS 握手过程。
我的应用程序实现了客户端,正如我从这里看到的一般流程是:
- InitializeSecurityContext - 第一次调用返回一个指向 SecBufferDesc 结构的指针。
- 使用输出缓冲区调用发送(=WinSock API) 函数。
- 调用recv函数
- 使用缓冲区再次调用 InitializeSecurityContext。
关于这些缓冲区的MSDN解释:
“在初始调用后调用此函数时,必须有两个缓冲区。第一个缓冲区的类型为 SECBUFFER_TOKEN,包含从服务器接收到的令牌。第二个缓冲区的类型为 SECBUFFER_EMPTY;将 pvBuffer 和 cbBuffer 成员都设置为零。”
我的问题:
- 我需要更多解释:缓冲区的含义是什么?第二个缓冲区包含什么?它们是干什么用的?
- 在 MSDN 中写到 InitializeSecurityContext 函数的 TargetDataRep 输入参数是用于 Schannel 的坚果,但我看到的许多示例将其设置为 SECURITY_NATIVE_DREP。什么是 SECURITY_NATIVE_DREP 标志?为什么 MSDN 说将其设置为零?
我将非常感谢任何帮助。
谢谢!。
java - 握手期间恢复缓存会话时出现 SSLException
我的 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)”
java - 使用 rxtxComm 处理 RS232 DB9 中的握手线
我使用 rxtxComm 与 Arduino(USB 串行端口)进行通信(发送和接收数据)。如何使用 rxtxComm 库处理像 DTR 这样的握手线?你能给我一些关于这个的教程或一些示例代码吗???
- 注意:我使用的是win7操作系统。我今天(21-4-2012)买了一个 USB-Serial(DB9)适配器;计划将 LED 阵列直接连接到 rs232...
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。
ssl - SSL serverhello 消息中的未指定字节
在 SSL 3.0 握手期间,服务器使用以下 serverhello 消息响应
我对这个回复的理解如下:
但我不明白最后 7 个字节应该如何解释:00 05 ff 01 00 01 00
java - 注册接收 SSLSocket 握手完成的事件通知
您可以注册以接收握手完成的事件通知。
你为什么不注册这个?SSLSocket.startHandshake() 在没有 SSLException 发生的情况下成功的事实是否确保证书是可信的?或者您是否通过等待握手完成来获得一些额外的保证?
c++ - Sha1 的 C++ Base64 - WebSocket 握手
我目前正在尝试运行可以与 WebSocket 通信的 C++ 服务器。HandShake 由几个步骤组成,最后一个步骤我没有成功。
第一步是生成一个 SHA1 编码的字符串,我成功获得了正确的十六进制字符串。(例如http://en.wikipedia.org/wiki/WebSocket和https://www.rfc-editor.org/rfc/rfc6455)。
我的输出在这两种情况下都与文档中所述相同:
所以这是对的。当我现在进行 Base64 编码时,我得到以下结果:
而这完全不同。我确认我的 Base64 算法适用于某些在线转换器,并且它们都产生了我的服务器所做的输出。所以问题是输入格式。我在一个 javascript 论坛中找到了一个论坛条目,其中一个有同样的问题,答案是,我们应该传递 20 个字符的二进制表示,而不是传递 40 个字符的十六进制字符串。
我知道 openssl SHA1 返回二进制表示,但由于某些原因我不能使用该库。我使用的 SHA1 库将编码的输出放在一个 int 数组中。输出如下所示(IETF 示例):
我把它转换成这样的十六进制:
现在是个大问题。如何将我的十六进制字符串转换为二进制?
非常感谢提前。马库斯
编辑
如果有人对代码感兴趣: https ://github.com/MarkusPfundstein/C---Websocket-Server