将自定义验证逻辑添加到dart:io HttpClient

时间:2020-06-19 16:00:17

标签: http flutter dart client httpclient

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

所以流程看起来像这样:

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

我已经在调查SecurityContext。问题在于,它仅针对固定的一组证书进行验证,但是我想基于主机发送的证书来动态验证证书。 另外,我看到HttpClient中有一个badCertificateCallback方法,但这不能很好地满足我的用例需求,因为我想验证每个证书,而不仅仅是无效证书。

我想知道我是否可以在理论上创建一个使用HttpClient作为超类的类,从而修改其行为,但是我想知道是否存在一种更优雅的方法,当HttpClient的实现发生更改时,这种方法不会轻易破坏它。

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

这里有没有人做过类似的事情,可以给我提示吗? :)

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

相关问题