我需要一种在Windows 10 Universal应用程序中实现证书或公钥锁定的好方法.所有代码都在C#中,并且所有连接都是HTTPS,因此Windows.Web.Http.HttpClient
该类的内容非常棒.是否有一个简单的类/库,或者至少是一个循序渐进的指南,如何实现这些可以由不知道X.509证书的神秘细节的人安全地完成的东西?
我发现的一些事情谈论使用本机代码或OpenSSL等第三方库(非常复杂!).我找到的最好的事情是这个问题,关于WP8.0钉扎,其中包括一个代码示例,应在WP8.1工作,希望也Win10,但它是一种丑陋和混乱,我不知道如何在发送包含敏感信息的请求时,要求服务器的证书是固定证书之一.由于检查时间/使用时间(TOCTOU)攻击,事先检查似乎不安全(除非HttpRequestMessage
.TransportInformation
函数打开连接然后保持打开,因此攻击者没有机会获得一个输入 - 新连接的中间位置).理想情况下,有一种方法可以过滤HttpClient,因此它只连接到带有固定证书的服务器,但我能找到的最接近的东西恰好相反(忽略某些证书错误,如此处所述)通过HttpBaseProtocolFilter.IgnorableServerCertificateErrors
属性,似乎没有任何限制有效证书的选项.
这有人有一个很好的解决方案吗?如果HttpRequestMessage.TransportInformation
方法(使用自定义证书验证代码)是唯一选项,那么在发送请求之前检查该属性是否可以安全地防止TOCTOU攻击?