那么优化方向应该是:
启动时预热常用域名证书(方案
C)——确保磁盘缓存覆盖用户最常访问的域名,消除首次访问的 1.1 秒阻塞,启动block-proxy的时候
用一个异步任务来遍历配置项中所有需要 MITM 的域名,然后预生成域名证书。
- 打开上游 TLS session cache,先不着急做。
关于域名证书有效性的问题,可以在代理服务启动时做一次简单的健
康检查——用 OpenSSL 验证每张缓存证书的签名链是否指向
rootCA,无效的删掉让它重新生成。同时加上一个简单的try catch 来加一个保护,进一步确保证书自愈
即SNI 回调层的 try-catch。
最后就是生成域名证书算法改生成算法为 ECDSA P-256,改成椭圆曲线算法。
总结就是四个方向的改动优化:
- 启动时用一个异步程序做预热常用域名证书
- 每次启动都要做证书健康度检查,如果证书有问题,就重新预热一下,也是异步程序,这个动作解决域名证书有效性问题
- 生成域名证书算法改生成算法为 ECDSA P-256,为了要做这个事,就要 必须替换掉 node-forge,用 Node.js 原生 crypto
模块来做证书生成和签名。
- 证书自愈逻辑,SNI 回调层的 try-catch,当检测到是证书问题(ERR_SSL_* 类错误),在保护逻辑中,删除该域名的 .crt + .key 文件,清除 LRU 缓存中的条目,客户端自动重试时,触发重新生成
这四个动作一起设计完善掉。
请你用 superpowers 相关技能来设计方案
那么优化方向应该是:
启动时预热常用域名证书(方案
C)——确保磁盘缓存覆盖用户最常访问的域名,消除首次访问的 1.1 秒阻塞,启动block-proxy的时候
用一个异步任务来遍历配置项中所有需要 MITM 的域名,然后预生成域名证书。
关于域名证书有效性的问题,可以在代理服务启动时做一次简单的健
康检查——用 OpenSSL 验证每张缓存证书的签名链是否指向
rootCA,无效的删掉让它重新生成。同时加上一个简单的try catch 来加一个保护,进一步确保证书自愈
即SNI 回调层的 try-catch。
最后就是生成域名证书算法改生成算法为 ECDSA P-256,改成椭圆曲线算法。
总结就是四个方向的改动优化:
模块来做证书生成和签名。
这四个动作一起设计完善掉。
请你用 superpowers 相关技能来设计方案