惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
F
Fortinet All Blogs
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
Docker
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
V
Visual Studio Blog
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
L
LangChain Blog
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
P
Proofpoint News Feed
博客园_首页
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Check Point Blog
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog

HTTP

用上了 Let’s Encrypt 的 IP 证书,太香了 safari 无法打开网站,但 chrome 可以 大家一般如何保证服务器 set-cookie 按序保存的 明御 WEB 应用防火墙 如何找回密码? 直连模式下 https 网站打不开 关于在其他国家访问中国国内数据出现严重丢包问题 求教同样的 url 参数头部 cookies, scrapy 请求返回验证码, requests 直接请求就正常,代码如下 什么工具适合方便的发送原始 HTTP 包? 冷知识:.ml 域名可以注册了 想监测某航空余票 http 代理,如果不支持 connect 方法,有没有办法访问 https 的网站? 关于 tomcat 配置国密 https 后出现的问题求助 一个 udp 的疑问 tradingview 上面策略的买入 卖出信号怎样发送给服务器,现在 webhook URL 现在收费 有什么办法可以解决的 选择重传协议疑问 有个用于测试 HTTPS 链接各阶段耗时的命令行工具想不起来叫啥了 求各位高手推荐一个 postman 的 mac 下的替代。。 有现成的 Http 请求批量发送和管理工具吗? 报文主体和实体主体的差异 请教一下各位, http2 的头部有什么简单的方法去解码吗? 后 911S5 时代 各路 ip 代理的对比与选择 (仅供参考) HTTP 协议 HEAD 请求,会有查询字符串吗? 一个 http 请求由多个 tcp 数据包组成,一个 tcp 连接可以发送多个 http 请求,是这样吗? httpCanary 的上传服务器插件,这个应该如何配置? 请教各位技术大大一个 websocket 消息丢失的问题 某些网站在特定的提交中需要手工选择 chrome 的证书,这是 https 的双向认证吗 HTTP/2 长连接的存续期多久? REST 祖师爷 Roy Fielding 说: RPC 就不适合 RESTful 风格。只有超文档适合用 REST 2022 年 TLS 1.3 HTTP/2 下到底该不该开启 Gzip 压缩? 可以不关闭服务替换证书吗? 谢谢
TLS 回顾
GopherDaily · 2023-11-28 · via HTTP

Secure Sockets Layer(SSL) 是网景(Netscape) 在 1995 年提出的一种安全加密协议, 包括 1.0, 2.0 和 3.0 三个版本.

Transport Layer Security(TLS) 是由 IETF 主导的, 对 SSL 的更新. TLS 的初始版本和 SSL 3.0 基本相同. TLS 1.2/1.3 是当前的主流版本, 1.3 相对 1.2 在安全和性能上都有明显的提高.

Encrypt, Digest and Sign

数据经过加密后(Encrypt), 仅拥有对应密钥的人, 经过解密后可以看到数据的内容. 密钥的形式分为对称密钥和非对称密钥, 非对称密钥下, 常由第三方用公钥对数据进行加密, 随后仅私钥的持有者可以解密对应数据.

摘要(Digest)是指将不定长的数据映射到固定长度, 如 MD5 就会产生 128 比特的字符串. 数据发布者主动公布摘要后, 数据使用者可以按相同规则计算数据的摘要, 通过比对, 校验数据的完整性, 避免使用的数据被篡改.

签名(Sign)是指使用非对称密钥中的私钥计算数据对应签名, 使用者可以使用对应公钥验证数据和签名的关联性, 进而确保数据是由公钥对应方发布或认证的.

TLS 1.2

基于 RSA 交换密钥的 TLS 握手流程如下, 常见于 TLS 1.2:

  • 客户端连接到服务端的端口, 并发送 ClientHello, 主要包括: 支持的 TLS 版本, 支持的加密套件(cipher suite) 和 32 个字节的客户端随机数.
  • 服务根据收到的信息, 返回 ServerHello, 主要包括: 选择的 TLS 版本, 选择的加密套件和 32 个字节的服务端随机数; 以及服务端的 TLS 证书.
  • 客户端基于预先配置的可信 CA, 校验 TLS 证书中的主机名和预期相符.
  • 客户端生成 pre-master secret, 用收到证书中的公钥加密后发送给服务端, 即 ClientKeyExchange.
  • 服务端用私钥解密 ClientKeyExchange, 获的 pre-master secret, 配合前文的客户端随机数, 服务端随机数生成会话密钥.
  • 客户端使用 pre-master secret, 客户端随机数, 服务端随机数生成会话密钥.
  • 服务端用会话密钥加密本次握手的数据, 发送给客户端供其确认会话密钥.
  • 客户端用会话密钥加密本次我所的数据, 发送给服务端供其确认会话密钥.

客户端确认服务端身份依赖于 Certificate Authority (CA), 即证书颁发机构. 其工作机制可以简单的理解为:

  • 存在一些总所周知的证书颁发机构, 如 DigiCert, Let's Encrypt.
  • 服务端提供主机名向这些 CA 申请公私钥证书, 公钥证书中含有服务端对应主机名, 并由 CA 的私钥签名.
  • 操作系统预先内置了这些 CA 的公钥证书, 客户端在和服务端建立链接时使用预置的 CA 的公钥来验证服务端的证书是可信.

基于 RSA 的密钥交换中, 由客户端生成 pre-master secret 后, 使用服务端的公钥加密后传输给服务端. 理论上, 仅服务端使用严密保护的私钥可以解密这部分数据获取到 pre-master secret. 随后, 客户端和服务端用 pre-master secret, 客户端随机数和服务端随机数生成相同的密钥, 用于后续数据的对称加解密.

TLS 1.3 相较于 TLS 1.2 在安全性和握手效率上都要较大的提高, 具体可以参考 为什么要使用 TLS 1.3 ?.

SNI

Server Name Indication (SNI) 是 TLS 的一个扩展, 允许客户端在 ClientHello 中指定想要连接的主机名. SNI 主要用于同一 IP 的服务器承载多个主机名的场景.

诸如 Istio 这样的 Mesh 方案, 会大量使用 SNI 来做路由.

Source: https://github.com/j2gg0s/j2gg0s/blob/main/_posts/2023-11-27-TLS%20%E5%9B%9E%E9%A1%BE.md