学过http的都知道http发送数据都是明文方式,数据是没有安全性的,因此诞生了https,https就是在http的基础上进行SSL/TLS加密(现如今都是TLS加密)。
服务端需要申请SSL证书,这个SSL证书是需要向CA第三方机构申请的,这个证书表明域名属于谁,这个证书里还包括了特定的公钥和私钥,服务器安装SSL证书后,用户就可以通过HTTPS来访问服务器了
学过http的都知道http是建立在tcp上的,而https就是在tcp三次握手后在进行一次TLS握手,这个握手是如何进行的如下所示:
(首先得知道服务端持有公钥和私钥)
1.client hello(客户端发给服务端)
客户端把自己支持的TLS版本,加密套件发送给服务端,并同时生成一个随机数给服务端(称其为第1个随机数)。
2.server hello(服务端发给客户端)
服务端确认支持的TLS版本以及选择的加密套件,并且服务器也生成一个随机数给客户端(称其为第2个随机数)。
3.certificate(服务端发给客户端)
服务端向客户端发送证书
4.server key exchange(服务端发给客户端)
服务端向客户端发送公钥
5.server hello done(服务端发给客户端)
服务端确认发送完毕后,会告诉客户端都发送完毕。
6.客户端收到server hello done后,再生成一个随机数(第3个随机数,也成为预主密钥)
7.client key exchange,change cliper spec,encrypted handshake message(客户端发给服务端)
客户端生成的第三个随机数不是直接发送给服务端的,是通过服务端发送来的公钥进行加密,然后再发送给服务端;然后服务端接收到加密的预主密钥通过私钥解密得到了真正的第3个随机数。
进行上面的7步后,客户端和服务端都会有三个随机数,并且只有他们自己知道,除非私钥被泄露。
8.encryted handshake message(服务端发送给客户端)
这样客户端和服务端都通过这三个随机数计算出会话密钥,并且得到的会话密钥是相同的,TLS握手已经成功了,可以进行加密数据交换了。
上面的整个过程就是非对称加密,这个过程资源消耗很大;所以接下来的会话不会采用这个加密方式。
因为得到了会话密钥,而且这个密钥只有他们自己知道,所以后面的会话直接通过这个会话密钥对数据加密就可以了。