在我们使用envoy替换原有云上alb的过程中,遇到了加密套件不兼容的问题,导致有大量大握手失败,对比envoy文档上的支持,我们发现envoy相对于云上ALB,少了以下六个cipher,除了ECDHE
TLS问题排查也就面临两类问题: TLS握手阶段 真正加密还没开始,所以依托明文形式的握手信息,还可能找到握手失败原因。...从同一台客户端: 访问API server 1可以 但访问API server 2不行 发现失败原因就是TLS握手失败: 在客户端的应用日志里的错误: javax.net.ssl.SSLHandshakeException...这里日志也无法告诉我们:到底TLS握手哪里问题。所以要做点别的事。 3.2 排除服务端问题 先用趁手小工具 curl,从这台客户端发起对API server 2(握手失败的)的TLS握手,发现能成功。...TLS握手的重要任务之一就是 找到双方共同支持的那个密码套件,即“共同语言”,否则握手就必定会失败。...这是TLS握手中的重要内容,我们的案例1就是因为无法协商出公用的密码套件,所以TLS握手失败了。
如果设置了 /secure/,那么客户端在和服务端建立了连接之后,必须要先进行 TLS 握手,TLS 握手成功后,才可以进行 WebSocket 握手。...如果 TLS 握手失败(比如服务端证书不能通过验证),那么客户端必须关闭连接,终止其后的 WebSocket 握手。...在 TLS 握手成功后,所有和服务的数据交换(包括 WebSocket 握手),都必须建立在 TLS 的加密隧道上。...如果连接发生在 HTTPS(基于 TLS 的 HTTP)端口上,那么要执行一个 TLS 握手。如果 TLS 握手失败,就必须关闭连接;否则的话之后的所有通信都必须建立在加密隧道上。...如果服务端不想接收这个连接的话,它必须返回适当的 HTTP 错误状态码(比如 403 Forbidden)并且终止接下来的 WebSocket 握手过程。
7.1.3 已经开始 WebSocket 关闭握手 在发送或者收到了关闭帧时,我们可以说已经开始 WebSocket 关闭握手,并且 WebSocket 连接的状态已经到了“关闭中”(CLOSING)状态...终端在确认另一端没有能力接收或者处理关闭帧时,可能会选择省略发送关闭帧,从而在一开始就进入正常错误流程导致 WebSocket 连接关闭。...为了实现这些,客户端必须像第 7.1.7 节中定义的一样让WebSocket 连接失败。 如果任意一端底层的传输连接意外丢失,客户端必须让WebSocket 连接失败。...例如是由于一个临时的错误导致的关闭,在这种情况下能够恢复就能够带来一个稳定的连接,恢复正常的操作。...这个状态码是用于上层应用来表示连接失败是因为 TLS 握手失败(如服务端证书没有被验证过)导致的关闭的。 7.4.2 保留状态码范围 0-999 0-999 的状态码都没有被使用。
结构如下: HTTP: TCP > HTTP HTTPS: TCP > TLS > HTTP WS: TCP > WS WSS: TCP > TLS > WS 2 WebSocket的通信过程 首先,Websocket...Websocket 其实是一个新协议,但是为了兼容现有浏览器的握手规范而借用了HTTP的协议来完成一部分握手。...客户端与服务端通过TCP三次握手建立连接,如果这个建立连接失败,那么后面的过程就不会执行,Web应用程序将收到错误消息通知。...否则握手连接失败,Web应用程序触发onerror,并且能知道连接失败的原因。...网上的帖子大多深浅不一,甚至有些前后矛盾,在下的文章都是学习过程中的总结,如果发现错误,欢迎留言指出~ 官方文档: MDN - WebSocket W3C - The WebSocket API RFC
最后前端领域的协议握手便成了三分天下: TCP三次握手,归HTTP。 TLS握手,归HTTPS WebSocket握手,基于TCP协议,都能用。 2....TLS握手:HTTPS的核心 ?...,我们先关心下TLS握手吧。...3.2 TLS握手详解 TLS 握手何时发生?: 每当用户通过HTTPS导航到网站并且浏览器首先开始查询网站的原始服务器时,就会进行TLS握手。...每当其他任何通信使用HTTPS(包括API调用和HTTPS查询上的 DNS)时,也会发生TLS握手。 通过 TCP 握手打开 TCP 连接后,会发生TLS 握手。 TLS 握手期间会发生什么? ?
10.5 WebSocket 客户端认证 这个协议在 WebSocket 握手时,没有规定服务端可以使用哪种方式进行认证。...10.6 连接保密性和完整性 连接保密性是基于运行 TLS 的 WebSocket 协议(wss 的 URLs)。WebSocket 协议实现必须支持 TLS,并且应该在与对端进行数据传输时使用它。...如果在连接中使用 TLS,TLS带来的连接的收益非常依赖于 TLS 握手时的算法的强度。例如,一些 TLS 的加密算法不提供连接保密性。为了实现合理登记的保护措施,客户端应该只使用强 TLS 算法。...如果这个无效的数据是在 WebSocket 握手时收到的,服务端应该响应一个合适的 HTTP 状态码(RFC2616)。 使用错误的编码来发送数据是一类通用的安全问题。...10.8 在 WebSocket 握手中使用 SHA-1 在这个文档中描述的 WebSocket 握手协议是不依赖任意 SHA-1 的安全属性,流入抗冲击性和对第二次前映像攻击的抵抗力(就像 RFC4270
然而国内对这一功能的原理类文章很少,有的甚至有错误。...客户端收到 200 后,在这个连接中进行 TLS 握手,握手成功后进行正常的 HTTP 传输。...这里我们需要重点关注下 TLS 握手过程。...信任根证书后,我们可以在 TLS 握手之前直接签发一个对应域的证书来进行 TLS 握手,这就是包括 burp 在内的所有需要截获 HTTPS 数据包的软件都需要信任一个根证书的原因!...TLS 模式下有所不同,因为 TLS 握手时服务器没法读取请求,为此 TLS 有个叫 SNI(Server Name Indication)的拓展解决了这个问题,即在 TLS 握手时发送客户端请求的域给服务器
服务器和资源名称,表明通过这个链接的传输需要通过 TLS(包含标准的 TLS 能力例如数据保密性和完整性以及终端认证)来进行保护。...URI 协议含义 这个方案的唯一操作就是使用 WebSocket 协议打开一个连接,通过 TLS 加密。...Sec-WebSocket-Key 头字段是用在 WebSocket 开始握手阶段。它是通过客户端发送给服务端,这部分信息用于服务端证明收到一个有效的 WebSocket 握手操作的认证。...Sec-WebSocket-Version 头字段在服务端理解的版本不匹配从客户端收到的版本导致的 WebSocket 握手失败时,也从服务端发送给客户端。...hybi@ietf.org RFC6455 1015 TLS握手 hybi@ietf.org RFC6455 11.8 WebSocket 操作码注册表 该规范根据 RFC5226 中规定的原则为
:实现 WebSocket 协议及维护心跳 TLS 层:基于 mbedTLS 实现 TLS 协议及数据加解密 TCP 层:基于 libuv 实现 TCP 连接和数据的读写 整体架构如下图所示...WebSocket 层 WebSocket 层包含了对协议的实现和心跳的维护。 其最新的协议是 13 RFC 6455。协议的实现分为握手,数据发送/读取,关闭连接。 握手 握手要从请求头去理解。...同时要注意 Sec-WebSocket-Key 字段,它由客户端生成并发给服务端,用于证明服务端接收到的是一个可受信的连接握手,可以帮助服务端排除自身接收到的由非 WebSocket 客户端发起的连接,...解耦 首先我们要对四层结构的职责进行明确 Worker :提供业务接口和回调 WebSocket :负责 WebSocket 握手,封装/解析帧数据和维护心跳 TLS :负责 TLS 握手和数据的加解密...,参照 WebSocket 协议实现了其握手及数据读写,同时抽象出通信接口及回调,为了和原生层交互,iOS 和 Android 分别采用 runtime 消息发送和 JNI 进行原生方法调用。
event loop 包含了六个阶段: timers 阶段:这个阶段执行 timer( setTimeout 、 setInterval )的回调 I/O callbacks 阶段:执行一些系统调用错误...WebSocket 层 WebSocket 层包含了对协议的实现和心跳的维护。 其最新的协议是 13 RFC 6455。协议的实现分为握手,数据发送/读取,关闭连接。 握手 握手要从请求头去理解。...同时要注意 Sec-WebSocket-Key 字段,它由客户端生成并发给服务端,用于证明服务端接收到的是一个可受信的连接握手,可以帮助服务端排除自身接收到的由非 WebSocket 客户端发起的连接,...解耦 首先我们要对四层结构的职责进行明确 Worker :提供业务接口和回调 WebSocket :负责 WebSocket 握手,封装/解析帧数据和维护心跳 TLS :负责 TLS 握手和数据的加解密...总结 回顾一下跨平台长连接组件的设计,我们使用 libuv 和 mbedtls 分别实现 TCP 和 TLS ,参照 WebSocket 协议实现了其握手及数据读写,同时抽象出通信接口及回调,为了和原生层交互
4.如果上一步中的TCP连接建立失败,则此WebSocket连接失败。 5.如果协议是wss,则在上一步建立的TCP连接之上,使用TSL发送握手信息。...如果含有Sec-WebSocket-Extensions头,要判断是否之前的Request握手带有此内容,如果没有,则连接失败。...如果含有Sec-WebSocket-Protocol头,要判断是否之前的Request握手带有此协议,如果没有,则连接失败。...接受了客户端的连接请求,服务端要做的一些事情 如果请求是HTTPS,则首先要使用TLS进行握手,如果失败,则关闭连接,如果成功,则之后的数据都通过此通道进行发送。...之后服务端可以进行一些客户端验证步骤(包括对客户端header域的验证),如果需要,则按照RFC2616来进行错误码的返回。 如果一切都成功,则返回成功的Response握手消息。
WebSocket 握手消息的几个特性值得注意: 请求和响应中 的Connection和Upgrade标头表明这是一次 WebSocket 握手。...这样做是为了防止错误配置的服务器或缓存代理导致误导性响应。 三次握手以后表示建立了客户端与服务端建立websocket连接,可以通过websocket协议进行通信。...服务器可以采用任何 HTTP 服务器的客户端身份认证机制,如 cookie认证,HTTP 基础认证,TLS 身份认证等。 因此,认证实现方面的安全问题与基于HTTP的Web认证并无区别。...websocket安全问题如何预防 正确验证输入输出的数据,跟http协议一样 使用CSRF Token、请求头令牌等方案保护WebSocket握手流程,防止WebSocket握手流程被CSRF攻击所利用...使用wss://协议,(基于TLS的Websockets) 在服务器进行授权,防止越权的产生。
以下内容为自己个人的学习笔记,因此内容不会多么详实;其中有些内容也许会存在错误,如有错误欢迎留言处指出,还望谅解。...为了实现和 HTTP 的兼容性,WebSocket 握手使用 HTTP 的 Upgrade 头,即表示从 HTTP 协议改成 WebSocket 协议,以下是一个简单的 WebSocket 握手请求。...Options 实例,这里看下其中的 NewOptions 函数 在第 61 行可以看到如果请求中没有给出 stdin、stdout 和 stderr 这三个参数,这个 Options 实例将创建失败...而且因为 getExec 报错失败了,所以这种连接也没有对接到某个 Pod 上,连接也没有被销毁,客户端可以继续通过这个连接向 Kubelet 发送指令。...-n test /bin/hostname kubectl --token=password --server=https://172.16.214.18:6443 --insecure-skip-tls-verify
CreateResponse: 这是创建WebSocket响应的函数,用于处理握手请求并生成响应头。...StartTlsArgs:该结构体用于保存开始TLS握手所需的参数,包括TLS流资源和一些配置选项等。...StartTlsArgs结构体存储开始TLS握手所需的参数,以便在需要时进行TLS握手。TlsListenerResource结构体则表示一个TLS监听器资源,用于管理TLS连接的建立和断开等操作。...该函数首先尝试使用IPv4格式解析地址,如果解析失败,则尝试使用IPv6格式解析地址。如果无法解析网络地址,则函数将返回一个错误。...SqliteDbHandlerError 定义了在数据库操作过程中可能发生的错误类型,例如数据库连接失败、准备语句失败等。
二、WebSocket 通信过程 WebSocket 协议可分为两部分:握手阶段和数据通信阶段。...= Upgrade: websocket 2.3、数据通讯 WebSocket 握手连接成功之后。...ws.close() 然后发送关闭帧给对方,通常会带有关闭连接的状态码,常见的状态码如下: 1000 连接正常关闭 1001 端点离线,例如服务器down,或者浏览器已经离开此页面 1002 端点因为协议错误而中断连接...端点收到的数据帧类型不一致而导致连接关闭 1008 数据违例而关闭连接 1009 收到的消息数据太大而关闭连接 1010 客户端因为服务器未协商扩展而关闭 1011 服务器因为遭遇异常而关闭连接 1015 TLS...握手失败关闭连接 三、websocket 实例 3.1、客户端创建websocket对象,并建立连接之后发送数据。
: HTTPS握手(TLS-ECDHE) 实际抓包HTTPS握手过程: 1、ClientHello:TCP连接建立后,Client会发出ClientHello请求,开始进行TLS握手。...TLS RSA加密 其实最开始的TLS握手过程没有那么复杂,以前使用的是RSA传统的加密手段,但是由于无法保证前向安全所以逐渐淘汰了 握手过程如下: ClientHello:TLS版本、客户端随机数、...请求,开始进行TLS握手。...工作原理 WebSocket并没有从零开始设计,反而是站在HTTP协议的基础上进行设计。WebSocket也需要进行握手后,才能正式收发数据。...客户端收到响应报文,就可以用同样的算法,比对值是否相等,如果相等,则握手成功。 最终报文如下: 完整握手交互抓包 websocket报文帧
领取专属 10元无门槛券
手把手带您无忧上云