Windows 10 Universal应用程序中的证书固定

CBH*_*ing 6 .net ssl-certificate dotnet-httpclient windows-10-universal

我需要一种在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攻击?

Sur*_*uka 1

下面的文章有一个很好的解决方案。尝试一下。

https://www.codeproject.com/Articles/849510/Certificate-Pinning-on-Windows-Phone

我在 UWP 方面没有太多经验,但在 Window 8.1 商店应用程序中有package.appxmanifest一个文件,使您能够在“声明选项卡”上定义根证书,因此,您可以在代码上进行适当的验证。

下面的文章还定义了一些关于如何保护应用程序和 HTTP 连接的好方法。 https://blogs.windows.com/buildingapps/2015/10/13/create-more-secure-apps-with-less-effort-10-by-10/#bWSeoR0pMyW2H8fg.97