所以我有一个应用程序运行节点js,socket.io作为后端,普通的javascript作为前端.我的应用程序有一个登录系统,目前只需让客户端在连接后立即发送其登录数据.
现在我认为将登录数据与handshakeData一起发送会更好,因此我可以在连接时(而不是在建立连接之后)直接让用户登录,在登录数据无效时分别拒绝授权.
我认为最好将我的附加数据放在handshakeData的标题部分,所以任何想法我怎么能这样做?(如果可能的话,无需修改socket.io,但如果这是我可以忍受的唯一方式)
我遇到了问题并尝试调试它.我们购买了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签署的,但其中一个是自签名的.
如果有人可以解释这个自签名证书如何出现在CA签名证书中?
这个错误是否19 (self signed certificate in certificate chain)
良性?如果没有,可能是什么原因造成的?
客户端在受信任存储中具有CA证书,但自签名证书没有任何内容.你认为这可能导致问题吗?如果是,我该怎么做:
我看到运行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) 我一直在用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
函数内执行请求的原因。
题:
如果有人想了解更多关于WebSocket协议的信息,这是(我认为)很好的文档[link1] [link2]。
只有刷新IE上的Web应用程序,WebSocket才会被销毁。
如果您在Web应用程序中的页面之间导航,则会创建一个新的WebSocket,但最后一个WebSocket将被破坏。
javascript internet-explorer network-protocols websocket 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) 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的密码套件,我们将协议和密码限制为TLSv1和SSL_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
第一种方法在这里:
<?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) 我正在编写一个接受传入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握手设置Netty,其中客户端和服务器都提供并验证证书.
这似乎没有在SslHandler中实现.有没有人这样做?我想它会进入SslHandler.handshake操作并被委托给javax.net.ssl.SSLEngine?
任何提示/提示/预先存在的实现?
谢谢!
ANSWER(stackoverflow不会让我以正常的方式发布它)我发现如果我在设置我的SslHandler之前在SSLEngine对象上设置了needClientAuth标志,那就解决了这个问题!
我似乎无法连接到带有的https端点SoapClient
.当我的wget返回时handshake failure
,我怀疑这是原因.
如何使用此服务器执行SOAP请求PHP
?
我正在尝试连接到SOAP服务器(https).它没有客户端证书身份验证,因此连接应该非常简单,但遗憾的是它不是.
问题是我不断收到Could not connect to host
消息.
我正在使用的连接方法正在为另一台服务器工作,我已经验证我正确设置了该服务器的位置(将其更改为我控制的服务器,并且我在那里得到响应).我怀疑问题出在与服务器的https/ssl连接上.
Soapclient
基于本地wsdl 的PHP .wget
它连接到它时会出现问题(见下文)无法建立SSL连接.有很多关于"没有连接!"的话题,但显然有很多"我的路由器坏了,我在地址等中输了一个错字".我确实尝试了多次建议的这些设置,但更多的是作为"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)
(首先只ssl
用verify_peer
和的选项allow_self_signed …