HTTPS
与SSL组合使用的HTTP就被称为HTTPS
HTTPS=HTTP的基础上+加密+认证+完整性保护,http协议组合了SSL(安全套接层)协议或者TLS(安全传输)协议使用,对HTTP的通信内容加密
ps:http协议在通信的时候并不会主动地为通信内容进行加密,而是由开发人员主动为通信内容主体(不包括报文头)采用不同的加密组件人为地加密通信内容,这样间接起到一个安全通信的作用。
HTTPS加密机制
HTTP采用对称性加密和公开密钥加密的混合组合机密机制
(1)首先发送消息方使用公钥加密方式将共享密钥发送给接收方
(2)然后消息发送方将消息内容用共享密钥加密发送给接收方,接收方根据之前接收到的共享密钥对消息内容进行解密,从而获取真正的消息内容
非对称性加密:使用一对密钥(公钥和私钥)进行加解密,消息发送方使用接收方公开的公钥加密,接收方使用自己的私钥解密。
如何确保服务器发放的公钥的正确性
可以使用数字证书认证机构(著名的有威瑞信)和相关机关颁发的公开密钥证书
数字证书家机构流程:
- 服务器的运营人员向数字认证机构提出公开密钥的申请
- 机构对申请的公钥做数字签名(MD5),然后将将这个已签名的公钥与公钥证书(也叫数字证书或证书)绑定在一起发送给客户端
- 客户端对接收到的公钥证书进行验证,会用数字认证机构的公钥解密去验证数字签名,验证通过客户端就可以判定该公钥是服务器提供的真实可靠的公钥
ps:数字认证机构的公钥会被浏览器开发商事先植入在内部,因为你很难再又去验证数字机构的公钥正确性了
SSL握手过程
- 客户端发出SSL握手信号
- 服务器端回应并出示相应的服务器证书(服务器公钥数字证书之类)
- 客户端验证服务器证书的正确性,然后产生共享密钥
- 客户端将用服务器公钥加密的共享密钥发送给服务器
- 服务器用自己的私钥解密得到共享密钥
- 双方使用共享密钥对通信内容进行加密,SSL安全通道建立成功
HTTPS速度慢吗?
答案是肯定的
由于客户端与服务器端进行TCP连接之前,需要经过SSL通信,这不仅会增加整体的通信量,加重网络负载2~100倍,而且需要做大量的加解密处理,这也会增加时延,还会消耗CPU和内存的服务器资源,拖累整个服务器的处理速度。综合来说,HTTPS的时延会大大增加,可使用SSL加速器硬件改善该问题
为什么不采用HTTPS通信
既然HTTPS的通信安全性远远高于HTTP,为什么所有的web网站都不采用HTTP?
- 所有的内容都进行加密通信,会消耗服务器更多的COU和硬件资源,留给请求处理的资源就相对变少了
- 只有一些敏感信息才需要保证严格的安全通信,并不是所有的信息都需要加密保护的
- 购买证书要钱啊,给每个用户买证书那web开发商喝西北风吗?