【HTTP系列】建立连接(握手)

第一步,客户端向服务器发起请求,请求中包含使用的协议版本号、生成的一个随机数、以及客户端支持的加密方法。 

第二步,服务器端接收到请求后,确认双方使用的加密方法、并给出服务器的证书、以及一个服务器生成的随机数。 

第三步,客户端确认服务器证书有效后,生成一个新的随机数,并使用数字证书中的公钥,加密这个随机数,然后发给服 务器。并且还会提供一个前面所有内容的 hash 的值,用来供服务器检验。 

第四步,服务器使用自己的私钥,来解密客户端发送过来的随机数。并提供前面所有内容的 hash 值来供客户端检验。 

第五步,客户端和服务器端根据约定的加密方法使用前面的三个随机数,生成对话秘钥,以后的对话过程都使用这个秘钥 来加密信息。 

  • client会先发一个clienthello消息,跟服务器打招呼,消息里面有client的TLS版本号,支持的密码套件列表,以及生成的随机数,随机数会被server保留。 

  • 当server收到client消息后,会确认TLS版本号是否支持,从密码套件列表中选择一个密码套件,以及生成随机数,接着返回serverhello消息,消息里包含确认的TLS版本号,随机数和密码套件中选择的密码套件。服务端为了证明自己的身份,会发送server certificate 给client,消息中包含有数字证书,随后,服务端发了serverhellodone消息,目的是告诉客户端,我已经把该给你的东西都给你了,本次打招呼完毕。 

  • 客户端验证完证书认为可信,继续往下走,客户端生成一个新的随机数,用服务器的RSA公钥加密该随机数,通过client key exchange消息传给server。服务端收到后,用RSA私钥解密,得到client发来的随机数,致此,client和server共享了三个随机数,双方根据三个随机数,生成会话秘钥,他就是对称秘钥,用于后续的http请求/响应的数据加解密。生成完会话密钥后,client发一个change cipher spec,告诉server 开始使用加密方式发送信息。然后,client在发一个encrypted handshare message消息,把之前所有生成的数据做个摘要,再用会话秘钥加密一个,让服务器做个验证,验证加密通信是否可用和之前握手信息是否被途中篡改过。 

  • 服务器也是同样操作下,发change cipher spec和encrypted handshare message消息,如果双方都验证下加密和解密没问题,那么握手正式完成。最后就用会话密钥和加解密http请求和响应了。 

数字证书包含了: 

公钥、持有者信息、证书认证机构(CA)的信息、ca对这份文件的数字签名以及使用的算法、证书有效期、还有一些额外的信息 

CA 签发证书的过程,如上图左边部分: 

  • 首先 CA 会把持有者的公钥、用途、颁发者、有效时间等信息打成一个包,然后对这些信息进行 Hash 计算,得到一个 Hash 值; 

  • 然后 CA 会使用自己的私钥将该 Hash 值加密,生成 Certificate Signature,也就是 CA 对证书做了签名; 

  • 最后将 Certificate Signature 添加在文件证书上,形成数字证书; 

客户端校验服务端的数字证书的过程,如上图右边部分: 

  • 首先客户端会使用同样的 Hash 算法获取该证书的 Hash 值 H1; 

  • 通常浏览器和操作系统中集成了 CA 的公钥信息,浏览器收到证书后可以使用 CA 的公钥解密 Certificate Signature 内容,得到一个 Hash 值 H2 ; 

  • 最后比较 H1 和 H2,如果值相同,则为可信赖的证书,否则则认为证书不可信。 

对称加密和非对称加密区别: 

对称加密: 

对称加密是指加密和解密使用相同的密钥,这种加密算法通常用于数据加密和认证。 

对称加密算法的特点是速度快,加密和解密操作只需要很少的计算资源。但是,由于相同的密钥用于加密和解密,因此安全性依赖于密钥的安全性。如果密钥泄露或被窃取,那么攻击者可以使用相同的密钥进行解密,从而破坏数据的机密性。 

常见的对称加密算法包括 AES、RSA、DSA 等。 

非对称加密: 

非对称加密是指加密和解密使用不同的密钥,通常称为公钥和私钥。这种加密算法通常用于数字签名和证书认证。非对称加密算法的特点是安全性高,需要较大的计算资源来进行加密和解密操作。但是,由于公钥和私钥分别用于加密和解密,因此使用起来比较复杂,需要更高的技术水平来管理密钥。 

常见的非对称加密算法包括 RSA、DSA、ECDSA 等。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值