当前位置: 首页 > Web前端 > JavaScript

HTTPS就是这样的握手

时间:2023-03-27 01:08:15 JavaScript

HTTP协议默认为明文传输,存在一定的安全隐患,容易被中间人窃听和攻击。在解决HTTP协议带来的安全问题的加密中,提到了使用哈希、对称加密、非对称加密。加密等方法对数据进行加密,可以解决数据安全问题。以上加密方式都需要我们手动使用加密算法来处理数据。如果觉得自己制定加密规则很麻烦,可以使用统一的数据安全方案:HTTPS(超文本传输??安全协议)。HTTP和HTTPS在浏览器中的表现在浏览器中输入HTTPurl。如果网站有HTTPS地址,则直接跳转到HTTPSTLS/SSLHTTPS在HTTP的基础上使用SSL/TLS对消息进行加密,为抗窃听和中间人攻击提供了合理的保护。TLS(TransportLayerSecurityProtocol)的前身是SSL(SecureSocketsLayer),工作在【应用层】和【传输层】之间。因此,HTTPS通信过程比HTTP多了一个TLS连接步骤。TCP三次握手一共有三个步骤TLS/SSL连接HTTP请求和响应TLS连接TSL连接有以下几个步骤,请求的每个步骤都存储了连接相关的数据。服务器返回的部分确认消息被省略。这里使用密钥交换算法ECDHE。不同的密钥交换算法有不同的过程。具体流程clienthellodelivery:TSLversion,supportedciphersuite(Ciphersuit),randomnumber服务器会回确认ACKserverhellodelivery:TLSversion,selectedencryptionsuite(choosefromthereceivedclientciphersuite),randomnumber证书传输:服务器的公钥证书ServerKeyExchange是用来实现ECDHE算法(ServerParams)的参数之一(ServerParams)ECDHE是一种密钥交换算法,为了防止伪造,ServerParams已经被服务器的私有签名keySeverHelloDone通知客户端,协商部分结束前的5个步骤已经明文共享:ClientRandom、ServerRandom、ServerParams,客户端也获得了服务器的公钥证书。接下来,客户端将验证证书的真实性。ClientKeyExchange用来实现ECDHE算法的另一个参数(ClientParams)至此,客户端和服务端都有ECDHE算法需要的2个参数:ServerParams和ClientParams,通过这两个参数可以计算出一个新的随机密钥String:Pre-mastersecret,然后结合ClientRandom,ServerRandom,Pre-mastersecret生成一个masterkey,最后用masterkey导出其他的key:client发送的sessionkey,server发送的sessionKey等。CipherSpec通知服务器:后续通信将使用计算出的会话密钥进行加密。Finished(在wireshark中看到的EncryptedHandshakeMessage)包含了目前连接的所有消息的整体校验值(summary),Encrypted(使用第六步最后生成的sessionkey)然后发送到服务器server->clientChangeCipherSpec通知客户端:后续通信将使用计算出的会话密钥进行加密Finished(参见wiresharkEncryptedHandshakeMessage)至此,客户端和服务端验证加密和解密都OK,握手正式结束。之后,将传输加密的HTTP请求和响应应用程序数据。最终的加密内容。第八步,通过服务器验证客户端的密钥。第九步和第十步是通过客户端验证服务器的密钥,从wireshark抓取的数据可以看出,数据是基于上述方法进行加密和加密的,这使得HTTP协议发送的数据更加安全。HTTPS的成本虽然HTTPS安全可靠,但是它比HTTP需要更多的成本,比如:证书费用、加解密计算、访问速度较慢等。而且,有些历史页面多年没有改动,数据不敏感。就成本而言,没有必要花时间进行重建。因此,企业的处理方式是:只对包含敏感数据的请求使用HTTPS,其他保持使用HTTP(如首页使用HTTP、登录等使用HTTPS)。以上就是HTTPS的介绍。更多关于前端和网络协议的内容可以参考我的其他博文,持续更新中~