此时,用SSL_get_error()可以获取具体的错误码:若是SSL_ERROR_WANT_READ或SSL_ERROR_WANT_WRITE,就在epoll中关注该连接的可读或可写事件,并在事件被触发时接着调用...由于socket为非阻塞,所以收发数据的函数SSL_read、SSL_write一样会非阻塞。他们的参数和普通的recv/send等读写类函数很像,就是传入buff和length这些。...可能刚好在recv协议数据时被阻塞了,那就只能乖乖地等socket可读了——SSL_write在这种情况下,会返回一个SSL_ERROR_WANT_READ,等待可读。...可以看到,收包的逻辑和发包类似,也是有可能会因为重协商产生写阻塞,我们在全双工实现的做法,一样是认为出错。...这也是在OpenSSL的官方文档中说明了的: ?
OpenSSL 中的 SSL 加密是通过 SSL/TLS 协议来实现的。SSL/TLS 是一种安全通信协议,可以保障通信双方之间的通信安全性和数据完整性。...在 SSL/TLS 协议中,加密算法是其中最核心的组成部分之一,SSL可以使用各类加密算法进行密钥协商,一般来说会使用RSA等加密算法,使用TLS加密针对服务端来说则需要同时载入公钥与私钥文件,当传输被建立后客户端会自行下载公钥并与服务端完成握手...,读者可将这个流程理解为上一章中RSA的分发密钥环节,只是SSL将这个过程简化了,当使用时无需关注传输密钥对的问题。...服务端实现代码与原生套接字通信保持高度一致,在连接方式上同样采用了标准API实现,唯一的不同在于当accept函数接收到用于请求时,我们需要通过SSL_new产生一个SSL对象,当需要发送数据时使用SSL_write...,而当需要接收数据时则使用SSL_read函数,通过使用这两个函数即可保证中间的传输流程是安全的,其他流程与标准套接字编程保持一致,如下是服务端完整代码实现。
在握手结束和会话建立之间可能会有一个间隙(理论上,会话可能根本不会建立),并可能对会话恢复代码产生影响。 (7)在TLS 1.3版本中,重新磋商是不可能的。 (8)现在大部分握手都会被加密。...(10)在TLS 1.3连接中不再允许使用DSA证书。 注意,在这一阶段,只支持TLS 1.3。因DTLS 1.3版本的规范刚刚开始制定,目前并不支持OpenSSL。...同时,OpenSSL的git主分支包含了我们的TLS1.3开发代码,可以用于测试(即不用于生产)。...你可以在任意OpenSSL版本中通过头文件tls1.h中的宏TLS1_3_VERSION_DRAFT_TXT的值来查看部署的TLS 1.3草案的版本。在该标准的最终版发布后,这个宏会被删除。...但是,ECDHE组中没有TLS 1.3密码套件,所以如果启用了TLS 1.3,那么这种密码套件配置在OpenSSL 1.1.1中将会出错。你可能要指定你想使用的TLS 1.3密码套件来避免出现问题。
http://blog.csdn.net/yueguanghaidao/article/details/8450938 这个主要是在CSAPP基础上做的,添加了POST,SSL,目录显示等功能。...filesize); } Munmap(srcp, filesize); } #3.CGI规范 如果只能显示页面那么无疑缺少动态交互能力,于是CGI产生了... post data from the stdin. */ /* https already read all data ,include post data by SSL_read...Rio_writen(fd, files, strlen(files)); } exit(0); } HTTPS的实现: HTTPS主要基于openssl...从HTTP GET响应中我们观察URL,参数的确是通过URL传送过去的。
不再允许对加密报文进行压缩、不再允许双方发起重协商 1.2、更简洁设计 TLS1.3禁止renegotiation。客户端尝试Renegotiation会导致连接错误。...TLS1.3强制使用(EC)DHE key exchange,在服务器签名,key是前向安全的 TLS1.3的PSK(Pre-shared Key)机制。...使用之前建立产生的Session ID/Ticket来还原加密通道,并在还原完成后发送应用层数据。...3.2必须使用AEAD算法: 消息认证(message authentication)或数据源认证(data origin authentication)表示数据在传输过程中没有被修改(完整性),并且接收消息的实体能够验证消息的源...AEAD将完整性校验和数据加密两种功能集成在同一算法中完成,是TLS 1.3中唯一支持的加密方式。
你愿意花一点点时间了解这个协议吗?你愿意投入精力去研究这个协议吗?你愿意全力推动业务来使用这个协议吗?...,在工程实现上也有很多优化点,同时在生产环境中也取得了较好的效果。...通过环境变量:aes-ni: OPENSSL_ia32cap="~0x200000200000000" openssl speed -elapsed -evp aes-128-gcm 或者在代码里将 crypto...Openssl 在 1.1.0 版本中正式支持了 chacha20-poly1305。...虽然后续可能会采用 TLS1.3 协议,但是事实上是 QUIC 推动了 TLS1.3 的发展; 3)为了实现传输的并发性,它又实现了 HTTP2 的大部分特性,包括多路复用,流量控制等。
OpenSSL升级 协议升级 密钥协商算法优化 对称加密算法优化 TLS1.2升级为1.3 密钥协商算法优化 密钥协商算法尽量选取ECDHE算法,该算法相比RSA算法具有向前保密,且在第三次握手以后就可以发送数据...-SHA; 使用以下命令可以查看本地Open SSL的密码套件 openssl ciphers TLS1.2升级为1.3 TLS1.3的握手简化为一个1RTT,大大减少了网络IO的耗时。...Client Hello中包含一个key_share,key_share中是椭圆曲线类型及其对应的公钥,第一个是预留的空值,第二个是我们这里选择的x25519曲线类型对应的公钥 Server Hello...证书验证优化 证书验证需要通过CA公钥解密证书以及使用签名算法验证证书的完整性,并且为了知道证书是否被CA吊销,需要再去访问CA来获取证书的有效性,这一步就产生了额外的网络开销。...CRL CRL是证书吊销列表,列表定期由CA更新,如果服务器的证书在该列表中,证书则失效。
你愿意花一点点时间了解这个协议吗?你愿意投入精力去研究这个协议吗?你愿意全力推动业务来使用这个协议吗?...,同时在生产环境中也取得了较好的效果。...原因是: 会极大降低用户访问速度。由于应用层的每一个字节都需要对称加解密,使用异步的方式实现会严重降低加解密的实时性。 那有没有同步的优化方式呢?有。...通过环境变量 aes-ni: OPENSSL_ia32cap="~0x200000200000000" openssl speed -elapsed -evp aes-128-gcm 或者在代码里将 crypto...虽然后续可能会采用 TLS1.3 协议,但是事实上是 QUIC 推动了 TLS1.3 的发展。 为了实现传输的并发性,它又实现了 HTTP2 的大部分特性,包括多路复用,流量控制等。
分析性能损耗 既然要对 HTTPS 优化,那得清楚哪些步骤会产生性能消耗,再对症下药。 产生性能消耗的两个环节: 第一个环节, TLS 协议握手过程; 第二个环节,握手后的对称加密报文传输。...而第一个环节,TLS 协议握手过程不仅增加了网络延时(最长可以花费掉 2 RTT),而且握手过程中的一些步骤也会产生性能损耗,比如: 对于 ECDHE 密钥协商算法,握手过程中会客户端和服务端都需要临时生成椭圆曲线公私钥...对于对称加密和签名算法,只支持目前最安全的几个密码套件,比如 openssl 中仅支持下面 5 种密码套件: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256...当然为了安全性,内存中的会话密钥会定期失效。 但是它有两个缺点: 服务器必须保持每一个客户端的会话密钥,随着客户端的增多,服务器的内存压力也会越大。...而 TLS1.3 更为牛逼,对于重连 TLS1.3 只需要 0 RTT,原理和 Ticket 类似,只不过在重连时,客户端会把 Ticket 和 HTTP 请求一同发送给服务端,这种方式叫 Pre-shared
然而,secrets产生的方式有许多变化。...Session Hash 在派生master key的过程中使用 client/server random会引发一些特定类型的滥用,因此发展出了一个名为TLS Session Hash和Extended...第一次调用是在client hello,用msg_type == 1和version == 0x0303表示 需要注意的是,TLS1.2和TLS1.3的版本都是0x0303,这是TLS 1.3中的向后兼容性...在偏移0x10处包含密钥的长度,会根据密钥算法的不同而变化,在偏移0x18处包含我们需要的密钥。 ?...第一调用产生的是HANDSHAKE_TRAFFIC_SECRET,第二次调用产生的是TRAFFIC_SECRET_0 SslExpandExporterMasterKey 对于TLS1.3,还要额外hookSslExpandExporterMasterKey
,即 SSL Pinning; …… 在介绍后文的具体解密方案中也会围绕这几点去进行分析。...这看似很简单,但实际操作起来会遇到一些问题。...以 openssl 为例,keylog 文件的支持实际上是在 commit 4bf73e 中才被引入。因此,如果遇到了某些应用中依赖于旧版本的 SSL 库,那么可能就不支持 keylog。...一个直接的思路就是通过挂钩 SSL_read、SSL_write 来获取 SSL 读写的明文数据。...实践上使用较多的是下面几种组合: 系统 HTTP 代理 + 根证书 路由抓包/透明代理 + 根证书 tcpdump + keylog SSL_read/SSL_write hook 每种方案都有其优点和缺点
已废除 SSL3.0: RFC6101, 基本废除 TLS1.0: RFC2246, 少数古董服务器仍在使用 TLS1.1: RFC4346 TLS1.2: RFC5246, 目前已广泛使用 TLS1.3...你说安全就安全吗,究竟是怎么实现的呢?绝对安全吗? 哈,有人的地方就有江湖,有江湖的地方就没有绝对的安全。但 SSL/TLS 确实可以极大程度保证信息安全。...3)签发证书:如信息审核通过,CA 机构会向申请者签发认证文件:证书。...接下来 server 和 client 会采用对称秘钥加密。...即可导出百度的证书 baiducom.crt b) 命令查看证书详细信息 openssl x509 -noout -text -in baiducom.crt 详细信息中,有一个字段: X509v3
中只剩下 GCM,非对称加密 RSA、ECDHE) - 怎么握手的呢?...(我会启动微任务执行吧) - requestAnimationFrame 在 EventLoop 中是一个什么位置?...(给他讲了分层的原理,通过设置 CSS 的 will-change 可以转换为一个图层,调用 GPU 加速) - 分离图层会发生重绘吗?(会)那既然重绘,它的好处在哪里?...- ESModule 既然是编译时加载,那它可以做到运行时加载吗,想过这个问题吗?(愣了一会,说webpack 有动态 import 的方式) - 写过 loader 和 plugin 吗?...- 公司的业务可能会压榨自己开源分享的时间,你会介意吗? - 公司内的一些代码不能开源,和你自己的开源分享冲突了,你怎么办? - 你为什么不早点去实习?现在才开始找实习?
想必大家也能猜到为什么HTTPS的连接要比HTTP慢了,嗯……就是因为TLS握手所产生的消耗。...在最差的情况下,也就是不做任何的优化措施,HTTPS 建立连接可能会比 HTTP 慢上几百毫秒甚至几秒,这其中既有网络耗时,也有计算耗时,就会让人产生“打开一个 HTTPS 网站好慢啊”的感觉。 ...软件升级实施起来比较简单,就是把现在正在使用的软件尽量升级到最新版本,比如把 Linux 内核由 2.x 升级到 4.x,把 Nginx 由 1.6 升级到 1.16,把 OpenSSL 由 1.0.1...所以,在软硬件升级都不可行的情况下,我们最常用的优化方式就是在现有的环境下挖掘协议自身的潜力。...但 CRL 因为是“定期”发布,就有“时间窗口”的安全隐患,而且随着吊销证书的增多,列表会越来越大,一个 CRL 经常会上 MB。
一般来讲会有7天,也就是说客户端7天中才会查询一次OCSP。对于一个用户经常访问的页面来讲,这个概率可能只有千分之一甚至万分之一。所以对用户的访问体验来讲,提升的效果也比较有限。...Openssl1.1.1以及Nginx 1.13.0目前已经支持TLS1.3的最新草稿draft20。也有一些客户端支持了TLS1.3,比如firefox。...但压缩比真的如官方页面宣传的有90%吗?...我们通过实验发现,在一个连接上发起第一次请求时,压缩只有30%,发起第二次请求时,压缩比能达到60%,一直到第三次请求以及之后的请求时,压缩比才能达到将近90%。为什么会这样呢?...或者更准确地说,HTTP2是下一个十年,最有性能优势,最具有统治力的WEB协议吗? 可以说是。
特殊值auto(1.11.0),表示 nginx 在使用 OpenSSL 1.0.2 或更高版本或 默认曲线为prime256v1 旧版本时,使用内置于 OpenSSL 库中的列表。...问题2:STEK 共享隐患 STEK是基于无状态服务进行部署,虽然服务端不需要关心Session cache,但是服务端是集群部署那么就需要共享STEK,而在共享STEK的过程中就会存在会因为网络传输产生很多安全隐患...密钥存储在 tmpfs(基于 RAM 的文件系统)中,并且不配置交换分区。...TLS1.3 解决问题方案也是显而易见,那就是会话的密钥也要加密之后再进行传输验证,而这一层加密就是对密钥做一次哈希,这样确保了传输会话密钥的过程安全,在Client Hello 中携带函数的相关信息,...在TLS1.3中,客户端在下一次请求中携带PSK,发送 Ticket 的同时会带上应用数据(Early Data),并且通过Client Hello 中进行传输。
1.1 我有权限的仓库 我有权限的仓库指的是我自己的,或者团队中我可以使用的仓库。 要使用git pull首先你要确定已经连接远程仓库。...要不然你直接git pull orgin master那Github会问你:“?什么master?哪个master?你就是老子的master吗?” 所以首先要连接远程仓库。...团队合作,一个仓库多人使用 你自己的仓库,你在多台电脑上使用(比如宿舍一个,实验室一个) 为什么要git pull呢?不同电脑上代码版本不一样。...我又添加了https的连接 第二步我又下拉的仓库 然后他又提示我: fatal: unable to access ‘https://github.com/hitvoice/DrQA.git/’: OpenSSL...SSL_read: Connection was reset, errno 10054 意思还是我无法连接。
最新版本 TLS1.2 在 2008 年被确立为标准,目前被大多数浏览器和启用 HTTPS 的 web 服务所支持。 在配置正常的情况下,TLS 1.2 会很安全,但如今它却显得有些过时了。...-2取而代之 任意 Diffie-Hellman 组 —— CVE-2016-0701漏洞 输出密码——易受 FREAK 和 LogJam攻击 TLS1.3 消除了旧版本中糟糕的加密方式,同时降低了旧的攻击方式对其产生影响的可能性...“延迟时间”特别会显著影响到: 移动设备用户 服务器在地理上相距很远的用户 ? 一条消息从悉尼往返纽约会花费超过200毫秒,而在移动设备上浏览还会增加这一延迟时间。...在欧洲仍普遍使用的3G网络下,这一延迟则会增加200毫秒。就连家用 WiFi 和 ISP 也会再增加几十毫秒的延迟。这些额外的延迟会使人感觉到移动浏览速度很缓慢。...它为所有浏览器而生 TLS1.3对网络安全和性能来说都是一大进步。尽管TLS1.3规范仍在进一步完善中,但IETF已非常接近完成这一协议的最终版本。
从IO可以看出,主要执行过程中基本没有IO进行,怀疑操作过程中可能一直使用的buffer中的数据,在执行过程中使用命令查看buffer命中情况: $ mysql> show engine innobase...总结 总体上看SSL加密会导致性能损失,使用yaSSL库会导致性能有较大下降,而使用OpenSSL库性能下降幅度远低于yaSSL,与不使用SSL的性能差别不大,同时使用OpenSSL 1.1版本的库又比使用...在SSL连接测试组中,大部分场景中,配置yaSSL或OpenSSL进行SSL连接与不配置SSL的性能在TPS表现差别不大;在部分测试场景(oltp_point_select、oltp_read_only...、oltp_read_write、短连接)中,配置yaSSL或OpenSSL进行SSL连接性能下降较大。...在透明加密测试组中,大部分场景(oltp_delete、oltp_insert、oltp_update_index、oltp_update_non_index、oltp_write_only)配置yaSSL
领取专属 10元无门槛券
手把手带您无忧上云