- tcp三次握手创建链接
- 客户端发送client-random+所支持的对称和非对称加密套件列表
- 服务端保存client-random,从中选择一个加密套件,返回service-random和数字证书
- 客户端收到service-random和数字证书,开始验证数字证书的合法性以及服务器的合法性;保存公钥,并生成pre-master随机数用公钥加密发送给服务器
- 服务器得到客户端pre-master用私钥解密;并用client-random,service-random和pre-master合成最终对称加密的秘钥master-secret
- 开始通讯
数字证书的验证:git
- 客户端用CA提供的HASH算法反算数字证书获得信息摘要A
- 客户端用CA的公钥解密数字证书获得信息摘要B
- 若是A/B一致则证书有效
注意:CA证书链会一直查找直根证书(操做系统内置)github
HTTP采用明文传输数据,在传输过程的每个环节都有可能被窃取或修改,这种攻击方式叫 中间人攻击
为了解决该问题,在HTTP协议栈中引入 安全层(SSL/TLS)
对称加密:加密、解密都使用相同的秘钥。
加密流程以下:算法
- 浏览器发送它支持的加密套件(加密方法)列表和一个随机数client-random
- 服务端会从加密套件列表中选择一个加密套件,而后返回随机数service-random
- 最好服务端和浏览器分别返回确认消息
存在问题:加密套件和随机数都是用明文传输,很容易被劫持伪造秘钥浏览器
非对称加密:有A/B两把秘钥,数据要A加密要用B才能解密,反之B加密数据要用A秘钥进行解密。
在HTTPS中经过明文传输的叫公钥,服务器本身留下的不公开的叫私钥。
加密流程以下:安全
- 浏览器将加密套件列表发送至服务器
- 而后服务器选加一个密套件,将公钥经过明文发送给浏览器
- 双方确认返回的消息
存在的问题:非对称加密效率过低,没法保证服务器发送给浏览器的数据安全(由于,公钥容易得到,能够经过公钥解密服务器的数据,而后返回给客户端)服务器
在传输过程经过对称加密;可是获取对称加密的过程,非对称加密实现。
加密流程以下:dom
- 浏览器向服务器发送对称加密的套件列表、非对称加密套件列表和随机数client-random
- 服务保存随机数client-random,选择对称加密和非对称加密套件,而后生成随机数service-random,并向浏览器发送选择的加密套件、service-random、公钥
- 浏览器保存公钥、并生成随机数pre-master,而后利用公钥对pre-master加密,并向服务器发送加密后的数据
- 最好服务器用私钥解密pre-master数据,并返回确认消息。
此时服务器、浏览器有了共同client-random、service-random、 pre-master,而后将这三组随机数生成对称秘钥
注意:第三方劫持到pre-master也没法解密,由于只有服务器才有私钥。tcp
经过对称和非对称混合加密方式,能够完美实现数据的加密传输。
可是,没法避免劫持DNS修改IP地址,而后经过伪造的IP创建中间站点窃取公钥和私钥。
因此服务器还要想浏览器证实“我就是我”。
经过权威机构颁发的证书(如:公安局派出所颁发身份证)
这个权威机构成为CA(Certificate Authority),颁发的证书叫作数字证书(Digital Certificate)
对于浏览器来讲,数字证书两个做用:证实服务器的身份,携带服务器公钥。
至此,请求流程改变以下:函数
- 服务器返回数字证书,公钥包含在数字证书中
- 浏览器对了个证书验证的过程,验证证书以后,才继续后续流程。
数字证书流程加密
- CA使用HASH函数计算提交明文的信息,并得出信息摘要
- CA使用它的私钥对信息摘要进行加密(加密后的密文就是CA颁发的数字签名)
分两种:中间CA和根CA
根CA内嵌至操做系统,由WebTrust认证
中间CA一般办理服务端的申请业务浏览器会沿着证书链一直查找至根证书是否在操做系统内,若是在就是合法,不然就是非法证书。