第一步,客户端向服务器发起请求,请求中包含使用的协议版本号、生成的一个随机数、以及客户端支持的加密方法。
第二步,服务器端接收到请求后,确认双方使用的加密方法、并给出服务器的证书、以及一个服务器生成的随机数。
第三步,客户端确认服务器证书有效后,生成一个新的随机数,并使用数字证书中的公钥,加密这个随机数,然后发给服 务器。并且还会提供一个前面所有内容的 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 等。
1万+

被折叠的 条评论
为什么被折叠?



