标签: handshake

在socket.io中发送自定义数据和handshakeData?

所以我有一个应用程序运行节点js,socket.io作为后端,普通的javascript作为前端.我的应用程序有一个登录系统,目前只需让客户端在连接后立即发送其登录数据.

现在我认为将登录数据与handshakeData一起发送会更好,因此我可以在连接时(而不是在建立连接之后)直接让用户登录,在登录数据无效时分别拒绝授权.

我认为最好将我的附加数据放在handshakeData的标题部分,所以任何想法我怎么能这样做?(如果可能的话,无需修改socket.io,但如果这是我可以忍受的唯一方式)

node.js handshake socket.io

57
推荐指数
4
解决办法
5万
查看次数

SSL握手失败 - 一个verisign链证书 - 包含两个CA签名证书和一个自签名证书

我遇到了问题并尝试调试它.我们购买了Verisign证书.当我们使用时:

openssl> s_client -connect myweb.com:443 -showcerts
Run Code Online (Sandbox Code Playgroud)

SSL握手永远不会完成,最后我们会看到错误:

Verify return code: 19 (self signed certificate in certificate chain)
Run Code Online (Sandbox Code Playgroud)

它显示3个---BEGIN/END CERTIFICATE---标签.链中的两个证书是Verisign签署的,但其中一个是自签名的.

  1. 如果有人可以解释这个自签名证书如何出现在CA签名证书中?

  2. 这个错误是否19 (self signed certificate in certificate chain)良性?如果没有,可能是什么原因造成的?

  3. 客户端在受信任存储中具有CA证书,但自签名证书没有任何内容.你认为这可能导致问题吗?如果是,我该怎么做:

    1. 如何从链证书中删除自签名证书,只留下链中的2个CA签名证书?
    2. 在客户端信任存储上添加此自签名证书?

ssl openssl handshake

40
推荐指数
3
解决办法
12万
查看次数

如何使Java 6与"SSL对等关闭不正确"的SSL连接失败,成功与Java 7一样?

我看到运行Java 6的客户端的SSL连接失败,例外情况如下:

Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:882)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:133)
    ... 35 more
Caused by: java.io.EOFException: SSL peer shut down incorrectly
    at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:462)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:863)
    ... 41 more
Run Code Online (Sandbox Code Playgroud)

该服务器是一个基于Tomcat 7的应用程序,在Java 7,Linux和Amazon EC2上运行,这是值得的.

我已经找到了很多关于可能的casues的建议,包括意外连接到非SSL端口等等.我相信我已经完全排除了这一点,主要是因为完全相同的客户端在运行Java 7时没有任何变化.(两种情况下都是OS X.)

下面我将介绍Java 6的调试输出和Java 7的SSL连接过程.我向专家提出的问题是,这是否表明可以在Java 6中启用一些可能的密码或协议设置(可能是Java 7中的默认设置)以使其工作

Java 6:

Allow unsafe renegotiation: false
Allow legacy hello messages: true
Is initial handshake: true
Is secure renegotiation: false
%% No …
Run Code Online (Sandbox Code Playgroud)

java ssl handshake sslhandshakeexception

28
推荐指数
2
解决办法
11万
查看次数

如果从未进行关闭握手,WebSockets将不会在IE上关闭

我一直在用JavaScript实现WebSocket,但我遇到了一个问题:
我的Web应用程序所连接的端点在发送一个封闭的控制框架时没有将其发送回去。

这还不错,因为浏览器会在一段时间后关闭WebSocket连接。

但是需要注意的几件事是:

  • 浏览器只允许同时连接一定数量的WebSocket。

  • 刷新Web应用程序时,将创建一个新的WebSocket。

这会导致IE上的问题:
刷新Web应用程序超过6次时,无法建立WebSocket连接。

如果尚未完全关闭WebSocket,似乎IE不会“删除” WebSocket。奇怪的是,Web套接字的数量似乎从未因刷新或等待而减少。

仅通过关闭浏览器窗口或选项卡将WebSockets的数量重置为0。


我做了一些研究,这是我发现的:


浏览器仅支持同时连接特定数量的WebSocket。

IE支持6个websocket进行连接[链接]

Chrome支持连接255个websocket [link]

并且socket.onclose()不会在您执行操作时触发socket.close(),而是在端点以关闭消息进行响应时调用。 [链接]

IE等待15秒,以便端点发送关闭消息[link]

Chrome等待60秒钟才能收到响应消息[很抱歉,对此没有链接,通过测试发现了此消息]。

如果未收到响应消息,则浏览器将关闭WebSocket连接,并应发生TimeoutError。

如果我错了请指正我:)


我尝试过使用unbeforeload与端点的断开连接,希望浏览器在一段时间后关闭连接,但是没有运气。[链接]
也可能是IE无法在[link]unbeforeload函数内执行请求的原因。

题:

  1. 是否可以通过JavaScript重置浏览器中连接到端点的WebSocket的数量?
  2. 有没有一种方法可以立即从端点断开WebSocket而不完全关闭连接?
  3. 是唯一可行的方法来通知托管其端点的主机进行一些更改,以便他们发送关闭帧吗?
  4. 有什么我误解的东西,或者我可以尝试使其工作吗?

如果有人想了解更多关于WebSocket协议的信息,这是(我认为)很好的文档[link1] [link2]

更新:

只有刷新IE上的Web应用程序,WebSocket才会被销毁
如果您在Web应用程序中的页面之间导航,则会创建一个新的WebSocket,但最后一个WebSocket将被破坏。

javascript internet-explorer network-protocols websocket handshake

24
推荐指数
1
解决办法
570
查看次数

致命:无法访问“.....”:gnutls_handshake() 失败:握手失败

过去几个月我一直在使用 Git。最近,当我尝试克隆或推送时,我不断收到此错误。我已经在互联网上进行了研究,但到目前为止没有任何解决方案对我有用。有没有人有想法?

外部说明:现在我搬到了不同的国家,它在我以前的地方工作得很好。Git 版本:2.11.0,操作系统:Debian GNU/Linux 9.11(扩展)

错误 :

git push
fatal: unable to access 'https://**************/': gnutls_handshake() failed: Handshake failed
Run Code Online (Sandbox Code Playgroud)

git github handshake gitlab

18
推荐指数
3
解决办法
3万
查看次数

在Android 5.0 Lollipop中,HttpClient失败并且Handshake Failed

Android 5.0 Lollipop中的DefaultHttpClient似乎被打破了.它无法设置与先前版本的Android成功设置的某些网站的连接.

例如,我尝试连接到https://uralsg.megafon.ru

//Create httpclient like in https://stackoverflow.com/questions/18523784/ssl-tls-protocols-and-cipher-suites-with-the-androidhttpclient
HttpClient client = new DefaultHttpClient(manager, params);
HttpGet httpGet = new HttpGet("https://uralsg.megafon.ru");
HttpResponse client = httpclient.execute(httpGet);
Run Code Online (Sandbox Code Playgroud)

此代码适用于Android 2.3-4.4,但在Android 5.0(设备和模拟器)上失败,错误连接被对等关闭.当然这是可以理解的,因为Android 5.0尝试将这个旧服务器与TLSv1.2和现代密码连接起来,并且它不支持它们.

好的,使用SSL/TLS协议中的示例代码和带有AndroidHttpClient的密码套件,我们将协议和密码限制为TLSv1SSL_RSA_WITH_RC4_128_MD5.现在它失败了,出现了不同的错误:

javax.net.ssl.SSLHandshakeException: Handshake failed
caused by 
    error:140943FC:SSL routines:SSL3_READ_BYTES:sslv3 alert bad record mac 
    (external/openssl/ssl/s3_pkt.c:1286 0x7f74c1ef16e0:0x00000003) 
    at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake
Run Code Online (Sandbox Code Playgroud)

当然,这段代码在Android 2.3-4.4上运行顺畅.

我用wireshark检查了流量:

302 4002.147873000  192.168.156.30  83.149.32.13    TLSv1   138 Client Hello
303 4002.185362000  83.149.32.13    192.168.156.30  TLSv1   133 Server Hello
304 4002.186700000  83.149.32.13    192.168.156.30  TLSv1   1244    Certificate
305 …
Run Code Online (Sandbox Code Playgroud)

ssl android handshake apache-httpclient-4.x android-5.0-lollipop

15
推荐指数
1
解决办法
2万
查看次数

javax.net.ssl.SSLHandshakeException:连接在com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(本机方法)上由peer关闭

在api level 24之前,我的代码工作正常,但它给了我api level 24(7.0牛轧糖)的错误.我没有得到我的代码出了什么问题.

第一种方法在这里:

 <?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>
Run Code Online (Sandbox Code Playgroud)

内部清单文件:

android:network Security Config = "@xml/network_security_config" 我已经包含network_security_config在内部res/xml/network_security_config,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; …
Run Code Online (Sandbox Code Playgroud)

ssl android handshake sslhandshakeexception

14
推荐指数
1
解决办法
8748
查看次数

如何检测传入的SSL(https)握手(SSL有线格式)?

我正在编写一个接受传入TCP连接的服务器.假设服务器已接受TCP连接,并且已从客户端接收到16个(左右)字节.知道那16个字节服务器如何检测客户端是否想要发起SSL握手?

我做了一个实验,它表明在我的Linux系统上通过SSL连接到localhost(127.0.0.1或AF_UNIX)会使客户端发送以下握手(hexdump),然后是16个看似随机的字节:

8064010301004b0000001000003900003800003500001600001300000a07
00c000003300003200002f03008000000500000401008000001500001200
0009060040000014000011000008000006040080000003020080
Run Code Online (Sandbox Code Playgroud)

服务器应如何探测前几个字节,以便能够确定客户端是否正在发送SSL握手?对于所有有效的SSL握手,探测器必须返回true,并且对于非SSL握手的客户端发送的消息,它必须返回false,概率很高.不允许使用任何库(如OpenSSL)进行探测.探针必须是一个简单的代码(如C或Python中的几十行).

ssl protocols handshake

13
推荐指数
2
解决办法
7562
查看次数

使用双向SSL Handake设置Netty(客户端和服务器证书)

我现在正尝试使用双向SSL握手设置Netty,其中客户端和服务器都提供并验证证书.

这似乎没有在SslHandler中实现.有没有人这样做?我想它会进入SslHandler.handshake操作并被委托给javax.net.ssl.SSLEngine?

任何提示/提示/预先存在的实现?

谢谢!


ANSWER(stackoverflow不会让我以正常的方式发布它)我发现如果我在设置我的SslHandler之前在SSLEngine对象上设置了needClientAuth标志,那就解决了这个问题!

java ssl netty handshake

13
推荐指数
3
解决办法
2万
查看次数

使用soapclient连接到https主机:如何解决SSL问题?

TLDR

我似乎无法连接到带有的https端点SoapClient.当我的wget返回时handshake failure,我怀疑这是原因.

如何使用此服务器执行SOAP请求PHP

完成

我正在尝试连接到SOAP服务器(https).它没有客户端证书身份验证,因此连接应该非常简单,但遗憾的是它不是.

问题是我不断收到Could not connect to host消息.

我正在使用的连接方法正在为另一台服务器工作,我已经验证我正确设置了该服务器的位置(将其更改为我控制的服务器,并且我在那里得到响应).我怀疑问题出在与服务器的https/ssl连接上.

情况

  • 我正在创建一个Soapclient基于本地wsdl 的PHP .
  • 如果我更改端点,我会收到Request和Response标头,一切都按预期工作.
  • 我可以从我的服务器访问该计算机,但是当我使用wget它连接到它时会出现问题(见下文)无法建立SSL连接.
  • 使用openssl连接也可以看到这个问题(见下文)

我尝试了什么.

有很多关于"没有连接!"的话题,但显然有很多"我的路由器坏了,我在地址等中输了一个错字".我确实尝试了多次建议的这些设置,但更多的是作为"cut'n'paste"解决方案,以确保它不起作用"然后出于真正的推理.我添加了一些评论

stream_context为wsdl选项创建一个.我试过了

$context = stream_context_create(
              array(
                'ssl' => array(
                           'verify_peer' => false,  //default
                           'allow_self_signed' => true, //needs verify peer, tried that
                           'ciphers'=>"SHA1", // quite random.
                   ),
                'https' => array(
                           'curl_verify_ssl_peer'  => false,
                           'curl_verify_ssl_host'  => false
                          )
      )
            );
$options['stream_context'] = $context;
Run Code Online (Sandbox Code Playgroud)

(首先只sslverify_peer和的选项allow_self_signed …

php ssl https soap handshake

12
推荐指数
1
解决办法
2万
查看次数