主页

索引

模块索引

搜索页面

基本

简介:

由数字签名和公钥组成
认证业务准则(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://img.zhaoweiguo.com/knowledge/images/protocols/protocol_ssl_tls_digest1.png

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 协议的安全,这被称为 “降级攻击”。

参考

主页

索引

模块索引

搜索页面