我们接触到的大多都是HTTP协议,协议没有进行加密。
然后就有SSL协议,用于对HTTP协议传输进行数据加密,然后就有了HTTPS
HTTPS:
- 数据完整性:要进行完整性校验,可以用摘要算法来防止数据传输中被篡改
- 数据隐私性:对内容进行对称加密(速度更快,消耗资源小)给每个连接生成一个唯一的sessionID
- 身份认证:第三方无法伪造身份,用非对称加密算法(需要CA)
工作原理
- 客户端发起HTTPS请求,SSL连接由客户端启动,用户输入一个网址,然后连接到server的443端口
- 客户端发送内容:
- 列出客户端支持的加密方式列表,SSL的版本,客户端支持的加密算法和数据压缩算法(HASH算法)
- 包含28字节的随机数:client_random
- 客户端发送内容:
- 服务端的配置
- 采用HTTPS协议的服务器要有一套数字证书,这套证书其实就是一对公钥和私钥
- 把公钥放在信任的组织那里,发数据时,用自己的私钥加密再用对方放在组织的公钥加密,对方取数据时用自己的私钥解密再用对方放在组织的公钥解密
- 传送证书
- 服务器选出一套加密算法和数据压缩算法
- 服务器生成随机数:server_random
- SSL数字证书,包含网站地址,公钥,证书的颁发机构,证书过期时间
- 客户端解析证书
- 由客户端的TLS来完成
- 验证证书的有效性,这是对服务器的一种认证,证书有问题弹出警告
- 如果证书没有问题,用公钥进行加密随机值
- Hash握手信息
- 传送加密信息
- 客户端发送公钥加密后的premaster secret(私钥),目的就是让服务端得到这个随机值,以后服务端和客户端通信就可以用这个随机值进行加密解密了
- 服务端解密信息
- 服务端用private key解密,得到了客户端传过来的随机值premaster secret(私钥)。步骤1中收到client_random,根据相同的生成算法,在相同输入参数的情况下,得到相同master_secret,然后把内容通过该值进行对称加密。
- 对称加密就是,将信息和私钥通过某种算法混合在一起,,除非知道私钥,就无法获取内容。
- 传输加密后的信息
- 服务器返回:将被premaster key对称加密的信息返回客户端,客户端可还原
- 客户端解密信息
- 客户端用之前生成的私钥解密服务器传过来的信息,就获取了解密后的内容,整个过程非法第三方监听到了数据也没有办法
加密方式
一般分为对称加密和非对称加密
对称加密
client和server使用相同的密钥对消息进行加密
优点:
- 加密强度高,很难被破解
- 计算量小,仅为非对称加密计算量的0.1%,可以用于生成会话ID
缺点:
- 无法安全的生成和管理密钥
- 服务器管理大量客户端密钥复杂
非对称加密
非对称就是加密与解密的密钥是两种密钥,服务器提供公钥,客户端通过公钥对消息进行加密,并由服务器的私钥对密文进行解密
优点:安全,在理论的时间里无法破解
缺点
- 性能太低,计算资源消耗巨大,一次完全的TLS握手,密钥交换时的非对称加密解密占用了整个握手过程的90%以上,而对称加密的计算量只相当于非对称加密的0.1%,因此如果对应用层使用非对称加密,开销过大
- 非对称加密对加密内容长度有限制,不能超过公钥的长度。比如现在常用的公钥长度时2048,所以加密消息内容不能超过256byte
证书
需要数字证书认证机构CA进行颁发的,证书是对服务器端的一种认证。颁发的证书同时会产生一个私钥和公钥,私钥服务器自己保存,公钥则附带在证书的信息中,可以公开。证书本身也附带一个证书的电子签名,用来验证证书的完整性和真实性。证书有有效期
证书的内容:
- 使用者的公钥值
- 使用者的标识信息
- 有效期
- 颁发者的标识信息
- 颁发者的数字签名
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256