基本 ###### 简介:: 由数字签名和公钥组成 认证业务准则(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需要辨别数据是否被篡改的能力 摘要派上用场 加密: .. figure:: https://img.zhaoweiguo.com/knowledge/images/protocols/protocol_ssl_tls_digest1.png :width: 60% 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 数字签名无疑是最好的选择 .. note:: PFS在斯诺登曝光 NSA 的 “今日捕获,明日破解” 政策后,越发重要。 PFS 反映到密钥协商过程中,就是:: 不要使用 RSA 做密钥协商,一定只用 RSA 做数字签名。 不要把 ECDH 的公钥固定内置在客户端做密钥协商 降级攻击: .. note:: 由于设计的时候,就要考虑兼容性,而且实际历史悠久,所以 TLS 协议 90 年代曾经使用的一些算法,现在已经被破解了,例如有的被发现漏洞 (rc4),有的密钥长度过短 (例如曾经美帝有出口限制,限制 RSA 在 512 比特以下,对称加密密钥限制 40 比特以下,后来 2005 年限制被取消),但是考虑到兼容,现在的 TLS 实现中,还是包含了这种已经被破解的老算法的代码。这样,如果攻击者可以干扰握手过程,诱使 client 和 server 使用这种已经被破解的算法,就会威胁 TLS 协议的安全,这被称为 “降级攻击”。 参考 ==== * `TLS/SSL 协议详解(1) 前言 `_ * `TLS/SSL 协议详解 (2) SSL有关的密码学原理 `_ * `TLS/SSL 协议详解(3) 运用密码学原理构建安全信道1 `_ * `TLS/SSL 协议详解 (4) 运用密码学原理构建安全信道2 `_ * `TLS/SSL 协议详解 (5) 运用密码学原理构建安全信道3 `_