【问题标题】:Adding custom validation logic to dart:io HttpClient向 dart:io HttpClient 添加自定义验证逻辑
【发布时间】:2020-06-19 16:00:17
【问题描述】:

我正在尝试创建一个HttpClient,它可以在每次 TLS 握手之后以及在获取/发送任何其他数据之前验证 SSL 证书。

所以流程看起来像这样:

  1. 创建一个 HttpClient
  2. 执行请求
  3. 客户端通过HTTPS连接到主机
  4. TLS 握手完成后,客户端现在知道证书
  5. 将证书传递给回调。回调成功时执行实际请求,否则中止请求
  6. 如果回调成功,请照常进行(例如传递响应等)

我已经在调查SecurityContext。问题是它只针对一组固定的证书进行验证,但我想根据主机发送的证书动态验证证书。 此外,我看到 HttpClient 中有一个 badCertificateCallback 方法,但这并不能很好地服务于我的用例,因为我想验证每个证书,而不仅仅是无效/坏的证书。

我想知道我是否可以在理论上创建一个使用 HttpClient 作为超类并因此修改它的行为的类,但我想知道是否有一种更优雅的方式在 HttpClient 的实现发生变化时不会轻易破坏。

我的另一个想法是设置一个默认拒绝每个证书的 SecurityContext。然后,我可以使用 badCerificateCallback 执行通常由 SecurityContext 完成的检查(检查受信任证书列表),并在此基础上添加我自己的验证。有人知道这可能有什么缺点吗?在阅读limitations regarding iOS 时,我有点不确定。

这里有没有人做过类似的事情并且可以给我一个提示? :)

提前致谢!

【问题讨论】:

    标签: http flutter dart client httpclient


    【解决方案1】:

    对于您的用例,最好有自己的BetterHttpClient 版本。

    但是,您可以使用组合来代替 BetterHttpClient 继承自 HttpClient。在BetterHttpClient 内撰写HttpClient。这将使您能够更好地控制要从现有实现中使用/更新的内容,并且这将更好地防止HttpClient 将经历的任何更改

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 2016-01-23
      • 2016-07-17
      • 1970-01-01
      相关资源
      最近更新 更多