【发布时间】:2018-10-09 23:00:21
【问题描述】:
我需要一种在 Windows 10 通用应用程序中实现证书或公钥固定的好方法。所有代码都在 C# 中,所有连接都是 HTTPS,所以 Windows.Web.Http.HttpClient 类的东西会很棒。是否有一个简单的类/库,或者至少是一个分步指南,用于如何实现这些东西,这些东西可以由不知道 X.509 证书的神秘细节的人安全地完成等等?
我发现一些关于使用本机代码或 OpenSSL 等第三方库的内容(非常复杂!)。我发现的最好的东西是this question 关于在 WP8.0 中的固定,其中包括一个应该适用于 WP8.1 并且希望也适用于 Win10 的代码示例,但它有点丑陋和令人困惑,我不确定如何在发送带有敏感信息的请求时要求服务器的证书是固定的证书之一。由于检查时间/使用时间 (TOCTOU) 攻击,事先检查似乎并不安全(除非 HttpRequestMessage.TransportInformation 函数打开连接,然后将其保持打开状态,因此攻击者没有机会在新连接上获得中间人位置)。理想情况下,有一种过滤 HttpClient 的方法,因此它只连接到具有固定证书的服务器,但我能找到的最接近的东西恰恰相反(忽略某些证书错误,如 here 所述)通过@ 987654326@ 属性,它似乎没有任何限制有效证书的选项。
这里有人有好的解决方案吗?如果 HttpRequestMessage.TransportInformation 方法(使用自定义证书验证代码)是唯一的选择,那么在发送请求之前检查该属性是否可以安全地抵御 TOCTOU 攻击?
【问题讨论】:
-
您好,我也遇到了和您一样的问题,请问您有什么办法吗?
标签: .net ssl-certificate dotnet-httpclient windows-10-universal