目录
HTTPS = HTTP(80端口) + SSL/TLS协议(传输层,443端口)
密文传输:SSL的后续版本TLS
TLS1.2握手
1.摘要算法(散列函数 Hash Function):验证信息的完整性,不可逆
第三方认证
引入场景:中间人篡改数据和公钥
引入场景:中间人篡改证书
1.1数字签名:保证数据不被篡改
1.2安全证书:保证公钥不被篡改
包含公钥、域名、有效期、数字签名(第三方机构私钥生成)
存于服务器端,可下载
应用:yarn/npm certificate has expiredHTTPS 证书过期
2.非对称加密(一对秘钥):身份认证,加密解密会话秘钥
2.1服务端发送公钥,作为身份认证
2.2客户端用密钥交换算法(如 RSA 或 ECDHE)生成的随机对称秘钥,作为协商的会话密钥
2.3 RSA :客户端用公钥加密会话密钥,服务端用私钥解密该预主密钥(pre-master secret)
3.对称加密(一个秘钥):密文通信,加密和解密数据
3.4. 服务端用会话密钥加密/解密数据,客户端用会话密钥解密/加密数据
SSL重连
A.通过session ID:只能是同一个服务器
B.通过session ticket:包含对话秘钥和加密方法的加密
git远程仓库
https:参照上述
SSH:传输层(TCP的22端口)
与TLS同:公钥加密,对称会话秘钥,哈希
公钥加密来安全交换或生成对称会话密钥
对称加密来保护数据传输
使用哈希或MAC防篡改数据。
与TLS区别:身份验证
SSH 常用秘钥对
TLS 多用证书和公钥
1.客户端生成密钥对SSH Key(公钥和私钥)
2.客户端:私钥 签名 随机数 或 特定挑战(challenge)
3.服务器:公钥来验证签名,确认身份
4.通常使用 Diffie-Hellman共同生成一个会话秘钥
5.哈希函数加密数据,会话秘钥加密解密秘文
蓝牙
1.初始配对:互输PIN码(传统),公钥私钥加密
2.基于PIN,设备地址,随机数等生成一个共享/链路秘钥
3.会话秘钥加密解密
应用:面对面快传/AirDrop
蓝牙/wifi/定位:免流量,识别附近对象
参考链接
HTTPS = HTTP(80端口) + SSL/TLS协议(传输层,443端口)
用SSL/TLS对数据进行加密和解密
SSL的全称是Secure Sockets Layer,即安全 套接 层协议
TLS的全称是Transport Layer Security,即安全 传输 层协议
密文传输:SSL的后续版本TLS
TLS1.2握手
1.摘要算法(散列函数 Hash Function):验证信息的完整性,不可逆
用散列/哈希函数得到摘要/哈希值
MD5: 128位散列值 (要被淘汰了)
SHA-1: 160位散列值
SHA-256: 产出256位的散列值
第三方认证
引入场景:中间人篡改数据和公钥
引入场景:中间人篡改证书
1.1数字签名:保证数据不被篡改
一般收发双方会约定好签名串的需要包含哪些内容。
如微信支付规定包含: HTTP请求方法、 URL、 请求时间戳、 请求随机串、 请求报文主体
- 发送方A散列处理(不可逆)签名串(固定信息),得到
摘要
HashA
私钥加密摘要得到签名
,发送给接收方B- 接收方B使用公钥验证签名,得到摘要
HashA
- 接收方B根据双方规定的构造签名串的方法,按照1的步骤生成新的摘要
HashB
- 比较哈希值
HashA。HashB
是否一样,如果一样,则证明数据没有被篡改(签名串包含了请求报文主体(传输的数据),请求体改了则摘要会变).
1.2安全证书:保证公钥不被篡改
包含公钥、域名、有效期、数字签名(第三方机构私钥生成)
存于服务器端,可下载
- 浏览器安装后会本地自带 权威第三方机构公钥,对数字签名进行解密,拿到HashA
- 使用数字证书中的摘要算法计算一遍数字证书相关内容,生成摘要
HashB,比对
证书机构(CA: Certification Authority)的权威:
证书链(上层证书给下层证书认证)+系统自带自签根证书
证书一个一层套一层的链式关系,
上层证书给下层证书颁发证书和数字签名,下层证书找上层证书认证。
最后认证到根证书,最高层的根证书是自签的(自己给自己颁发证书)。
一般微软等公司会根据一些权威安全机构的评估,选取一些信誉很好,并且通过一定的安全认证的证书发布机构,把这些证书发布机构的证书默认就安装在操作系统里面了。
已安装的信任证书:
windows:win+R -> 输入certmgr.msc.
mac:钥匙串中证书
应用:yarn/npm certificate has expiredHTTPS 证书过期
a.淘宝镜像过期
b.镜像源不符合SSL安全套接协议
2.非对称加密(一对秘钥):身份认证,加密解密会话秘钥
2.1服务端发送公钥,作为身份认证
2.2客户端用密钥交换算法(如 RSA 或 ECDHE)生成的随机对称秘钥,作为协商的会话密钥
2.3 RSA :客户端用公钥加密会话密钥,服务端用私钥解密该预主密钥(pre-master secret)
2.3 ECDHE:客户端和服务器通过椭圆曲线 Diffie-Hellman 交换来共同生成会话密钥。
3.对称加密(一个秘钥):密文通信,加密和解密数据
3.4. 服务端用会话密钥加密/解密数据,客户端用会话密钥解密/加密数据
- TLS 1.2,消息认证码(MAC,Message Authentication Code):发送方使用共享密钥和MAC算法对消息进行哈希处理
- TLS 1.3,GCM(Galois/Counter Mode):加密密钥与非加密的MAC密钥相关联来工作。它使用Counter模式和Galois Field运算来实现加密和认证。
SSL重连
A.通过session ID:只能是同一个服务器
目前所有的浏览器都支持这一种方法。
但是这种方法有一个缺点是,session ID 只能够存在一台服务器上,如果我们的请求通过负载平衡被转移到了其他的服务器上,那么就无法恢复对话。
B.通过session ticket:包含对话秘钥和加密方法的加密
session ticket 是服务器在上一次对话中发送给客户的,这个 ticket 是加密的,只有服务器能够解密,里面包含了本次会话的信息,比如对话秘钥和加密方法等。这样不管我们的请求是否转移到其他的服务器上,当服务器将 ticket 解密以后,就能够获取上次对话的信息,就不用重新生成对话秘钥了。
git远程仓库
https:参照上述
SSH:传输层(TCP的22端口)
SSH(Secure Shell)是一种加密的网络协议,用于安全地远程登录服务器、传输数据和执行命令。
与TLS同:公钥加密,对称会话秘钥,哈希
公钥加密来安全交换或生成对称会话密钥
对称加密来保护数据传输
使用哈希或MAC防篡改数据。
与TLS区别:身份验证
SSH 常用秘钥对
TLS 多用证书和公钥
1.客户端生成密钥对SSH Key(公钥和私钥)
ssh-keygen
命令
公钥在 ~/.ssh/authorized_keys
文件中,添加到远程服务器
私钥在 ~/.ssh/id_rsa
(默认名称)或其他自定义名称的文件中,保留在本地机器上。
RSA(Rivest-Shamir-Adleman)算法是一种非对称加密算法,广泛用于加密和数字签名
2.客户端:私钥 签名 随机数 或 特定挑战(challenge)
3.服务器:公钥来验证签名,确认身份
4.通常使用 Diffie-Hellman共同生成一个会话秘钥
5.哈希函数加密数据,会话秘钥加密解密秘文
蓝牙
1.初始配对:互输PIN码(传统),公钥私钥加密
无线公钥基础设施(Wireless Public Key Infrastructure,WPKI)的安全连接可能不需要输入