Skip to content

MITM 的性能问题 #36

Description

@jayli

那么优化方向应该是:

启动时预热常用域名证书(方案
C)——确保磁盘缓存覆盖用户最常访问的域名,消除首次访问的 1.1 秒阻塞,启动block-proxy的时候
用一个异步任务来遍历配置项中所有需要 MITM 的域名,然后预生成域名证书。

  1. 打开上游 TLS session cache,先不着急做。

关于域名证书有效性的问题,可以在代理服务启动时做一次简单的健
康检查——用 OpenSSL 验证每张缓存证书的签名链是否指向
rootCA,无效的删掉让它重新生成。同时加上一个简单的try catch 来加一个保护,进一步确保证书自愈
即SNI 回调层的 try-catch。

最后就是生成域名证书算法改生成算法为 ECDSA P-256,改成椭圆曲线算法。

总结就是四个方向的改动优化:

  1. 启动时用一个异步程序做预热常用域名证书
  2. 每次启动都要做证书健康度检查,如果证书有问题,就重新预热一下,也是异步程序,这个动作解决域名证书有效性问题
  3. 生成域名证书算法改生成算法为 ECDSA P-256,为了要做这个事,就要 必须替换掉 node-forge,用 Node.js 原生 crypto
    模块来做证书生成和签名。
  4. 证书自愈逻辑,SNI 回调层的 try-catch,当检测到是证书问题(ERR_SSL_* 类错误),在保护逻辑中,删除该域名的 .crt + .key 文件,清除 LRU 缓存中的条目,客户端自动重试时,触发重新生成

这四个动作一起设计完善掉。

请你用 superpowers 相关技能来设计方案

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions