【发布时间】:2020-06-19 16:00:17
【问题描述】:
我正在尝试创建一个HttpClient,它可以在每次 TLS 握手之后以及在获取/发送任何其他数据之前验证 SSL 证书。
所以流程看起来像这样:
- 创建一个 HttpClient
- 执行请求
- 客户端通过HTTPS连接到主机
- TLS 握手完成后,客户端现在知道证书
- 将证书传递给回调。回调成功时执行实际请求,否则中止请求
- 如果回调成功,请照常进行(例如传递响应等)
我已经在调查SecurityContext。问题是它只针对一组固定的证书进行验证,但我想根据主机发送的证书动态验证证书。 此外,我看到 HttpClient 中有一个 badCertificateCallback 方法,但这并不能很好地服务于我的用例,因为我想验证每个证书,而不仅仅是无效/坏的证书。
我想知道我是否可以在理论上创建一个使用 HttpClient 作为超类并因此修改它的行为的类,但我想知道是否有一种更优雅的方式在 HttpClient 的实现发生变化时不会轻易破坏。
我的另一个想法是设置一个默认拒绝每个证书的 SecurityContext。然后,我可以使用 badCerificateCallback 执行通常由 SecurityContext 完成的检查(检查受信任证书列表),并在此基础上添加我自己的验证。有人知道这可能有什么缺点吗?在阅读limitations regarding iOS 时,我有点不确定。
这里有没有人做过类似的事情并且可以给我一个提示? :)
提前致谢!
【问题讨论】:
标签: http flutter dart client httpclient