我正在尝试创建一个HttpClient,它可以在每次TLS握手之后且在提取/发送任何其他数据之前验证SSL证书。
因此,流程如下所示:
我已经在研究SecurityContext。问题在于,它仅针对固定的一组证书进行验证,但是我想基于主机发送的证书来动态验证证书。
另外,我看到HttpClient中有一个badCertificateCallback方法,但这不能很好地满足我的用例,因为我想验证每个证书,而不仅仅是无效证书。
我想知道我是否理论上可以创建一个使用HttpClient作为父类(super class)的类,从而修改其行为,但是我想知道是否存在一种更优雅的方法,当HttpClient的实现发生更改时,这种方法不会轻易打破这种情况。
我的另一个想法是设置一个SecurityContext默认情况下拒绝每个证书。然后,我可以使用badCerificateCallback来执行通常由SecurityContext完成的检查(针对受信任证书的列表进行检查),然后在上面添加自己的验证。有人知道这可能有什么缺点吗?在阅读有关limitations regarding iOS时,我有些不确定。
这里有没有人做过类似的事情,可以给我提示吗? :)
提前致谢!
最佳答案
对于您的用例,最好拥有自己的BetterHttpClient
版本。
但是,您可以使用composition代替从BetterHttpClient
继承的HttpClient
。在HttpClient
中编写BetterHttpClient
。这将使您可以更好地控制要在现有实现中使用/更新的内容,并且可以更好地防止HttpClient
进行任何更改
关于http - 将自定义验证逻辑添加到dart:io HttpClient,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62474160/