基本¶
简介:
由数字签名和公钥组成
认证业务准则(Certification Practice Statement, CPS)
RFC 5280, X.509 证书
扩展名:
.DER 扩展名
.PEM 扩展名
.CRT 扩展名
.CER扩展名
.KEY 扩展名
SSL/TLS:
通信协议
层次化的协议
TLS 记录协议(TLS record protocol)
TLS 握手协议(TLS handshake protocol)
* 握手协议
* 密码规格变更协议
* 警告协议
* 应用数据协议
对 SSL/TLS 攻击
对各密码技术攻击
OpenSSL 心脏出血漏洞
SSL3.0漏洞与 POODLE攻击
PREAK攻击
* 美国密码管制
对伪随机数生成器的攻击
利用证书的时间差进行攻击
Cipher Suites¶
默认项:
秘钥交换算法:RSA
签名算法:RSA
模式:CBC
authentication (认证) 算法:
RSA/DSA/ECDSA 3 种
encryption加密算法:
主流趋势是使用 aes
RC4(不建议使用)
3DES(不建议使用)
DES(已经被淘汰)
message authentication code 算法:
消息认证码 简称 MAC
主流有 sha256,sha384,sha1, 等
tls 中使用了 HMAC 模式,而不是原始的 sha256,sha1 等
key exchange (密钥交换) 算法:
主流有两种:DH 和 ECDH
现在普遍流行 PFS,把 DH, ECDH 变成 DHE,ECDHE
SSL/TLS¶
SSL提供了3种功能:
数据保密性
数据完整性
身份认证
核心:
在不安全信道上构建安全信道
所谓安全包括身份认证、数据完整性、数据加密性
说明:
非对称算法在 SSL 中的运用就是为了协商一个密钥
密钥的目的就是为了后续数据能够被加密
加密密钥有且只有通信双方知道
说明:
TLS/SSL 协议属于「加解密」算法中的复合算法
SSL v1.0, SSL v2.0因安全原因没有公开
1996年公开了v3.0版
而SSL v3.1版就是TLS1.0版
证书包含的几点重要信息:
拥有者(颁发给谁)
颁发者(谁颁发)
截止日期
证书时由从属关系的,当我们信任root证书的时候,我们就会信任CA1、CA2、CA3
根证书(root):
“颁发给”和“颁发者”都是一样的
根证书是通过工具自己生成的,无需外部因素(其他证书)
根证书用来干嘛?根证书用来“签名”它下一级证书
浏览器是内置许多可信任的根书,只要是拿这些根证书签发的证书,浏览器默认都信任
同样,如果服务器需要认证客户端的身份,那么客户端必须提供自己的证书,然后服务器验证这个证书,这个就是双向认证
关于密钥交换和协商:
//密钥协商和交换是SSL的一个关键,也是SSL性能消耗大的地方
//而需要消耗如此高性能的直接原因就是:客户端和服务器希望安全的交换或者协商出一个密钥
1:密钥使用周期必须是短暂的,不能长期有效,最好一个会话一个密钥
2:密钥不能明文的传输于网络,否则如果被别人看到,那么谁都能解密你们的会话了
1.服务器把自己公钥明文的发给客户端
2.客户端接着生成一个「密码」,然后拿公钥加密这个「密码」
3.把加密后的「密码」发给服务端
4.服务端用私钥解密,得到「密码」
保证数据的完整性:
保证后续加密的数据不被篡改,SSL需要辨别数据是否被篡改的能力
摘要派上用场
加密:
HTTPS通过TLS层和证书机制提供了内容加密、身份认证和数据完整性三大功能:
可以有效防止数据被监听或篡改,还能抵御 MITM(中间人)攻击
TLS 在实施加密过程中,需要用到非对称密钥交换和对称内容加密两大算法
非对称密钥目前最常用的密钥交换算法有 RSA 和 ECDHE:
RSA 历史悠久,支持度好,但不支持 PFS(Perfect Forward Secrecy)
ECDHE 是使用了ECC(椭圆曲线)的 DH(Diffie-Hellman)算法,计算速度快,支持 PFS
证书合法性校验的原理,简单总结如下:
1. 根据版本号、序列号、签名算法标识、发行者名称、有效期、证书主体名、证书主体公钥信息、发行商唯一标识、
主体唯一标识、扩展等信息,生成 TBSCertificate(To Be Signed Certificate)信息
2. 签发数字签名:
使用 HASH 函数对 TBSCertificate 计算得到消息摘要, 再用 CA 的私钥进行加密, 得到签名
3. 校验数字签名:
使用相同的 HASH 函数对 TBSCertificate 计算得到消息摘要, 与使用 CA 公钥解密签名得到内容相比较
ECDHE 数字签名的算法主要有 RSA 和 ECDSA,也就是目前密钥交换 + 签名有三种主流选择:
1.RSA 密钥交换(无需签名)
2.ECDHE 密钥交换、RSA 签名
3.ECDHE 密钥交换、ECDSA 签名
256 位 ECC Key 在安全性上等同于 3072 位 RSA Key,加上 ECC 运算速度更快,ECDHE 密钥交换 + ECDSA 数字签名无疑是最好的选择
备注
PFS在斯诺登曝光 NSA 的 “今日捕获,明日破解” 政策后,越发重要。
PFS 反映到密钥协商过程中,就是:
不要使用 RSA 做密钥协商,一定只用 RSA 做数字签名。
不要把 ECDH 的公钥固定内置在客户端做密钥协商
降级攻击:
备注
由于设计的时候,就要考虑兼容性,而且实际历史悠久,所以 TLS 协议 90 年代曾经使用的一些算法,现在已经被破解了,例如有的被发现漏洞 (rc4),有的密钥长度过短 (例如曾经美帝有出口限制,限制 RSA 在 512 比特以下,对称加密密钥限制 40 比特以下,后来 2005 年限制被取消),但是考虑到兼容,现在的 TLS 实现中,还是包含了这种已经被破解的老算法的代码。这样,如果攻击者可以干扰握手过程,诱使 client 和 server 使用这种已经被破解的算法,就会威胁 TLS 协议的安全,这被称为 “降级攻击”。