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