HTTPS,即HTTP over SSL/TLS,在HTTP下加入了一层SSL安全认证,比HTTP协议更安全。使用HTTPS需要到CA机构申请数字证书,客户端和服务端进行加密传输。我们先了解一下加密方式、数字签名、数字证书等知识,然后再看https是如何组合这些技术的。

数字签名和数字证书

需要理解数字签名和数字证书,首先要了解一下加密的几种方式。

加密方式

加密方式一般分为三种,对称加密、非对称加密以及Hash算法加密。

  • 对称加密

    加密和解密使用同一个秘钥,常用的对称加密算法有AES、DES、3DES等等。

  • 非对称加密

    加密和解密使用不同的秘钥,一把作为公开的公钥,另一把是私钥。公钥加密的信息,只有私钥才能解密。同理,私钥加密的信息,只有公钥才能解密。使用最广泛的非对称加密算法是RSA算法。

  • Hash算法加密

    单向加密算法,只能通过信息获取hash值,而不能通过hash值来获取原始信息。常见的hash算法有MD5、SHA1、Times33等。

数字签名

为了保证信息确实由发送方发,并且在传输过程中没有被篡改,就需要用到数字签名。发送报文时,发送方使用hash方式从原始报文中生成摘要,然后使用私钥对摘要进行加密,加密的结果就是发送方的数字签名:

数字签名

发送方将原始报文和数字签名同时发送给接收方,然后接收方进行数字签名的核对,确认消息的安全性:

数字签名验证

但是,为了解密数字签名,接收方是要预先获取发送方公钥的。这就引出了问题:公钥是不能直接在不安全的网络中传输的。而且一旦接收方存储的发送方公钥被替换,那么替换方就能伪造发送方的消息。

数字证书

所以,还需要一个证书授权中心(Certificate Authority,CA),对发送方的公钥进行认证,通过CA私钥加密后发放数字证书。证书中包含过期时间、序列号、所有者信息、所有者公钥等:

数字证书

此时,接收方就不需要预先存储发送方的公钥,因为发送方的公钥已经存储在数字证书里面了。发送方在发送消息时,也不需要发送公钥,只要附上CA颁发的数字证书,接收方可以通过CA公钥解密数字证书来获取发送方公钥:

数字证书验证

一般来说,操作系统、浏览器都会内置世界上公认可信的CA机构公钥,并且把修改的操作进行权限控制。如果解密数字证书失败,说明该数字证书是不受信任的机构颁发的,对于这种消息,我们应该谨慎对待。

HTTPS

在HTTPS协议中,主要涉及到三个角色:

  • 客户端:通常是浏览器、App等客户端程序

  • 服务器:HTTPS地址对应的服务器

  • CA机构:证书授权中心,服务器https证书由其颁发

认证流程

HTTPS流程

整个认证流程主要分为三个部分:

  1. 认证服务器证书。浏览器内部一般内置了受信任的CA机构,如果服务器证书是这些CA机构颁发的,那么就认为证书可信,并从证书中获取服务器公钥。否则提示用户警告信息,并由用户决定是否继续。

  2. 协商会话秘钥。客户端秘钥和会话秘钥都是随机生成的,每次协商都会生成不同的秘钥,提高安全性。

  3. 使用会话秘钥进行数据加密传输。因为会话秘钥随机生成,只存在于客户端和服务器,他人无法获取,保证数据不会被窃取和篡改。

缺点

相比于http协议,https无疑极大的增强了安全性,但是也带来了一些缺点:

  • 在真正通信前要进行协商和认证,通信时还要对数据进行加密和解密,比http协议更耗费资源。

  • 获取https证书需要从专门的CA机构购买,成本增加(小型网站可以选择免费证书)。

这也造成了有些公司明明能够支持https,但是默认却提供http。但是对于安全性及其重要的页面(支付、登录等),是必须使用https协议的。为了网络通信安全和隐私保护,越来越多的网站已经实现了全站HTTPS,为互联网提供安全服务而采用HTTPS已是大势所趋。