client_hello
客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息,相关信息如下。
支持的最高TSL协议版本version,从低到高依次,当前基本不再使用低于TLSv1的版本;
•客户端支持的加密套件ciphersuites列表,每个加密套件对应前面TLS原理中的四个功能的组合:认证算法Au(身份验证)、密钥交换算法KeyExchange(密钥协商)、对称加密算法Enc(信息加密)和信息摘要Mac(完整性校验);
•支持的压缩算法compressionmethods列表,用于后续的信息压缩传输;
•随机数random_C,用于后续的密钥的生成;
•扩展字段extensions,支持协议与算法的相关参数以及其它辅助信息等,常见的SNI就属于扩展字段,后续单独讨论该字段作用。
(2).server_hello+server_certificate+sever_hello_done
•server_hello,服务端返回协商的信息结果,包括选择使用的协议版本version,选择的加密套件ciphersuite,选择的压缩算法compressionmethod、随机数random_S等,其中随机数用于后续的密钥协商;
•server_certificates,服务器端配置对应的证书链,用于身份验证与密钥交换;
•server_hello_done,通知客户端server_hello信息发送结束;
(3).证书校验
客户端验证证书的合法性,如果验证通过才会进行后续通信,否则根据错误情况不同做出提示和操作,合法性验证包括如下:
•[证书链]的可信性trustedcertificatepath,方法如前文所述;
•证书是否吊销revocation,有两类方式离线CRL与在线OCSP,不同的客户端行为会不同;
•有效期expirydate,证书是否在有效时间范围;
•域名domain,核查证书域名是否与当前的访问域名匹配,匹配规则后续分析;
(4).client_key_exchange+change_cipher_spec+encrypted_handshake_message
(a)client_key_exchange,合法性验证通过之后,客户端计算产生随机数字Pre-master,并用证书公钥加密,发送给服务器;
(b)此时客户端已经获取全部的计算协商密钥需要的信息:两个明文随机数random_C和random_S与自己计算产生的Pre-master,计算得到协商密钥;
enc_key=Fuc(random_C,random_S,Pre-Master)
(c)change_cipher_spec,客户端通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信;
(d)encrypted_handshake_message,结合之前所有通信参数的hash值与其它相关信息生成一段数据,采用协商密钥sessionsecret与算法进行加密,然后发送给服务器用于数据与握手验证;
(5).change_cipher_spec+encrypted_handshake_message
(a)服务器用私钥解密加密的Pre-master数据,基于之前交换的两个明文随机数random_C和random_S,计算得到协商密钥:enc_key=Fuc(random_C,random_S,Pre-Master);
(b)计算之前所有接收信息的hash值,然后解密客户端发送的encrypted_handshake_message,验证数据和密钥正确性;
(c)change_cipher_spec,验证通过之后,服务器同样发送change_cipher_spec以告知客户端后续的通信都采用协商的密钥与算法进行加密通信;
(d)encrypted_handshake_message,服务器也结合所有当前的通信参数信息生成一段数据并采用协商密钥sessionsecret与算法加密并发送到客户端;
(6).握手结束
客户端计算所有接收信息的hash值,并采用协商密钥解密encrypted_handshake_message,验证服务器发送的数据和密钥,验证通过则握手完成;
(7).加密通信
开始使用协商密钥与算法进行加密通信。
注意:
(a)服务器也可以要求验证客户端,即双向认证,可以在过程2要发送client_certificate_request信息,客户端在过程4中先发送client_certificate与certificate_verify_message信息,证书的验证方式基本相同,certificate_verify_message是采用client的私钥加密的一段基于已经协商的通信信息得到数据,服务器可以采用对应的公钥解密并验证;
(b)根据使用的密钥交换算法的不同,如ECC等,协商细节略有不同,总体相似;
(c)severkeyexchange的作用是servercertificate没有携带足够的信息时,发送给客户端以计算pre-master,如基于DH的证书,公钥不被证书中包含,需要单独发送;
(d)changecipherspec实际可用于通知对端改版当前使用的加密通信方式,当前没有深入解析;
(e)altermessage用于指明在握手或通信过程中的状态改变或错误信息,一般告警信息触发条件是连接关闭,收到不合法的信息,信息解密失败,用户取消操作等,收到告警信息之后,通信会被断开或者由接收方决定是否断开连接。
作为软件开发者,时常会遇到网页性能不佳的情况,那么我们怎么去分析原因并进行优化呢
下面这篇文章给大家分享一下我的实战经验。在chrome开发工具的网络面板中查看页面资源加载情况并给予分析。
症状:
同时发出六个请求。之后有一系列的请求排队或受阻。一旦最先的六个请求中有一个响应结束,这趟请求中的另一个也开始了。

图一:在上述网络面板中有一系列排队或受阻的请求例子。我们可以从瀑布流里面看到名为“"的图片有六个请求同时发出。而后继的请求在原来六个请求结束之后才开始。
原因:单域中有太多请求。在HTTP/1.0或中,chrome浏览器只允许单个主机每次最多6次同步请求tcp连接。
修复:如果一定要用HTTP/1.0或者HTTP/1.1就采用分域
使用HTTP/2。不用使用HTTP/2进行分域
移除或者推迟不必要的请求,这样关键请求就能尽快响应。
延缓首字节
症状:一个请求花太长的等待时间去接收服务器的首字节
本文暂无评论 - 欢迎您