SSL/TLS加密提示 C-S Client To Server 客户端向服务器发送的报文 S-C Server To Client 服务器向客户端发送的报文1.加密流程1.C-S Client Hello 客户端支持的TLS版本客户端随机数支持的加密套件会话ID2.S-C Server Hello 服务器选择个TLS版本服务器随机数选择个加密套件会话ID会话ID 1.新建TLS连接时 客户端初始一个会话ID发送给服务器服务器返回也用这个ID 2.复用TLS连接时 1.可以复用 客户端使用要复用的会话ID发送给服务器 2.不可以/不支持复用 1.服务器发送新的ID客户端使用这个ID建连 2.服务器发送空的ID客户端重新建立TLS连接密码套件组成 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 1.密钥交换方法 ECDHE 2.签名认证方法 RSA 提示ECDHE_RSA是一个合成方法以前选择一个方法就能完成密钥交换现在加上了使用RSA进行验证更安全 3.对称加密方法 AES_256_GCM 4.哈希校验方法 SHA3843.S-C Certificate数字证书 服务器发送数字证书给客户端证书包含服务器公钥域名有效期CA签名数字证书 1.服务器公钥 2.域名 3.颁发者 4.有效期 5.CA对这份信息的数字签名 6.证书用途、公钥算法CA Certificate Authority 证书颁发机构 1.根CA 2.中间CA签名/验签 签名哈希私钥加密 验签公钥加密对比哈希 签名 证书的核心内容(公钥、域名等)用哈希算出字符串CA的私钥加密签名 验签 客户端也算一遍哈希字符串CA的公钥解密验签为什么私钥加密公钥能解密 不要问数学上的事少打听你就当物理定律4.C 客户端验证证书 客户端步骤1.证书是否有效期2.域名是否匹配3.证书链是否完整4.用系统内置根证书公钥验证CA签名5.确认没有被吊销证书链 1.根证书(Root CA) 2.中间证书(Intermediate CA) 3.服务器证书(End-Entity) 服务端发送证书时会发送服务器证书和中间证书 客户端收到后首先拿服务器证书的签名去中间证书验证确认服务器证书的合法性再拿中间证书的签名验证自己系统内部的根证书公钥确认中间证书是否为根CA授权的 客户端完成整个验证流程才会认为证书可信5.S-C Server Hello Done 服务端发送Hello完成6.C-S Key Exchange(密钥交换) 预主密钥Pre-Master Secret1.RSA密钥交换 1.客户端生成随机数叫预主密钥Pre-Master Secret 2.客户端用服务器证书公钥加密随机数发送给服务器 3.服务器用私钥解密拿到随机数(预主密钥Pre-Master Secret) 4.两端都有预主密钥Pre-Master Secret了 5.两端用这个密钥第一步的两端生成的随机数算出【master-secret主密钥】 6.下一步根据主密钥进行加密通信2.ECDHE密钥交换 1.双方各生成【临时私钥】【临时公钥】【临时密钥】 2.交换【临时公钥】本地【临时私钥】计算出相同【共享密钥】共享密钥为什么相等【简单来讲数学公式】 双方选出临时私钥根据椭圆曲线方程计算临时公钥交换后可以计算出相同的密钥 3.【共享密钥】第一步的随机数【主密钥】PFS前向保密 就算连接复用TLS1.3之后【共享密钥】也要重新计算3.ECDHE_RSA密钥交换ECDHE加密RSA验证 1.服务器发送证书带RSA公钥第三步 2.服务器用【RSA密钥】给【临时公钥】签名生成【临时公钥签名】 3.服务器把【临时公钥】【临时公钥签名】发送给客户端 4.客户端再证书的服务器【RSA公钥】验证【临时公钥签名】 5.客户端验证通过后得到服务器【临时公钥】 6.客户端发送自己的【临时公钥】 7.剩下就是ECDHE算法的内容7.C-S Change Cipher Spec 客户端通知服务器开始密文通信8.C-S Finished 客户端把之前所有的握手消息做哈希、加密后发送发送加密校验9.S-C Change Cipher Spec 服务器通知切换加密10.S-C Finished 服务器发送加密校验消息
TLS加密流程
SSL/TLS加密提示 C-S Client To Server 客户端向服务器发送的报文 S-C Server To Client 服务器向客户端发送的报文1.加密流程1.C-S Client Hello 客户端支持的TLS版本客户端随机数支持的加密套件会话ID2.S-C Server Hello 服务器选择个TLS版本服务器随机数选择个加密套件会话ID会话ID 1.新建TLS连接时 客户端初始一个会话ID发送给服务器服务器返回也用这个ID 2.复用TLS连接时 1.可以复用 客户端使用要复用的会话ID发送给服务器 2.不可以/不支持复用 1.服务器发送新的ID客户端使用这个ID建连 2.服务器发送空的ID客户端重新建立TLS连接密码套件组成 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 1.密钥交换方法 ECDHE 2.签名认证方法 RSA 提示ECDHE_RSA是一个合成方法以前选择一个方法就能完成密钥交换现在加上了使用RSA进行验证更安全 3.对称加密方法 AES_256_GCM 4.哈希校验方法 SHA3843.S-C Certificate数字证书 服务器发送数字证书给客户端证书包含服务器公钥域名有效期CA签名数字证书 1.服务器公钥 2.域名 3.颁发者 4.有效期 5.CA对这份信息的数字签名 6.证书用途、公钥算法CA Certificate Authority 证书颁发机构 1.根CA 2.中间CA签名/验签 签名哈希私钥加密 验签公钥加密对比哈希 签名 证书的核心内容(公钥、域名等)用哈希算出字符串CA的私钥加密签名 验签 客户端也算一遍哈希字符串CA的公钥解密验签为什么私钥加密公钥能解密 不要问数学上的事少打听你就当物理定律4.C 客户端验证证书 客户端步骤1.证书是否有效期2.域名是否匹配3.证书链是否完整4.用系统内置根证书公钥验证CA签名5.确认没有被吊销证书链 1.根证书(Root CA) 2.中间证书(Intermediate CA) 3.服务器证书(End-Entity) 服务端发送证书时会发送服务器证书和中间证书 客户端收到后首先拿服务器证书的签名去中间证书验证确认服务器证书的合法性再拿中间证书的签名验证自己系统内部的根证书公钥确认中间证书是否为根CA授权的 客户端完成整个验证流程才会认为证书可信5.S-C Server Hello Done 服务端发送Hello完成6.C-S Key Exchange(密钥交换) 预主密钥Pre-Master Secret1.RSA密钥交换 1.客户端生成随机数叫预主密钥Pre-Master Secret 2.客户端用服务器证书公钥加密随机数发送给服务器 3.服务器用私钥解密拿到随机数(预主密钥Pre-Master Secret) 4.两端都有预主密钥Pre-Master Secret了 5.两端用这个密钥第一步的两端生成的随机数算出【master-secret主密钥】 6.下一步根据主密钥进行加密通信2.ECDHE密钥交换 1.双方各生成【临时私钥】【临时公钥】【临时密钥】 2.交换【临时公钥】本地【临时私钥】计算出相同【共享密钥】共享密钥为什么相等【简单来讲数学公式】 双方选出临时私钥根据椭圆曲线方程计算临时公钥交换后可以计算出相同的密钥 3.【共享密钥】第一步的随机数【主密钥】PFS前向保密 就算连接复用TLS1.3之后【共享密钥】也要重新计算3.ECDHE_RSA密钥交换ECDHE加密RSA验证 1.服务器发送证书带RSA公钥第三步 2.服务器用【RSA密钥】给【临时公钥】签名生成【临时公钥签名】 3.服务器把【临时公钥】【临时公钥签名】发送给客户端 4.客户端再证书的服务器【RSA公钥】验证【临时公钥签名】 5.客户端验证通过后得到服务器【临时公钥】 6.客户端发送自己的【临时公钥】 7.剩下就是ECDHE算法的内容7.C-S Change Cipher Spec 客户端通知服务器开始密文通信8.C-S Finished 客户端把之前所有的握手消息做哈希、加密后发送发送加密校验9.S-C Change Cipher Spec 服务器通知切换加密10.S-C Finished 服务器发送加密校验消息