客户端证书和证书固定之间的区别,我需要两者吗?

Difference between client certificates and certificate pinning, Do I need both?

我有一个公开的 .net WEB API 和一个使用 API 的 Xamarin Forms 应用程序,由于它管理的数据,该应用程序需要非常安全。

我将为 Web API 创建一个 HTTP 证书。 Xamarin Forms 应用程序将有一个 login/password 来针对本地 Active Directory 进行验证。通过 /token 端点,并在所有端点上使用 Authorize 属性以确保每个 HTTP 调用都包含不记名令牌,我使用此实现:

我的实现基于这个: http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/

此外,客户要求我们提供客户端证书身份验证,我不明白这是怎么回事。 1.我需要给Xamarin Project添加证书,对吧?我如何添加它?我如何生成它? 2. 在 Web 中 API 我需要验证每个 http 调用都附有证书。 我找到了这个但不确定它是否有效: http://www.razibinrais.com/secure-web-api-with-client-certificate/

然而,在对此进行调查时,我还发现了一些关于证书固定的信息,这基本上是安全的,但反过来,这意味着 Xamarin APP 将验证服务器证书是否与正确的服务器相关联(或类似的东西) ), 所以中间人攻击是不可能的。 我在这里找到了如何实现它: https://thomasbandt.com/certificate-and-public-key-pinning-with-xamarin

问题是: 1. 我需要两者吗?

在这次旅程中我还应该研究什么?

证书固定和客户端证书身份验证是两个截然不同的东西。证书固定可确保您的应用程序正在与其预期与之通信的服务器通信。它还可以防止窃听,这被称为 'Man in the middle' 攻击。我最近刚刚写了一篇关于这个的文章 on my blog.

客户端证书身份验证以相反的方式工作。它增加了额外的安全层,因此您的服务器可以确保只有拥有证书的客户端才能与其成功通信。但是,由于可以不费吹灰之力地反编译应用程序,恶意用户可以 'easily' 获取此客户端证书。所以这不是灵丹妙药。

根据我的经验,当存在企业移动管理解决方案(例如 Mobile Iron 或 Microsoft Intune 或其他)时,企业应用程序中经常使用客户端证书身份验证,其中 EMM 解决方案可以将证书推送到用户设备带外。

你应该同时使用两者吗?这实际上取决于客户的要求,因为它们缓解了 2 个截然不同的问题。

您包含的 Web API link 乍一看应该可以正常执行服务器工作。本文还包括如何使用 Powershell 命令生成客户端证书。

正在生成客户端证书:

安装:

  • 将证书文件作为资源添加到每个特定于平台的项目中。这通常以 .p12 文件的形式完成。

用法:

  • 这完全取决于您使用的是哪个 HttpClient。
  • 如果您使用提供的 Web API 解决方案,您应该在每个请求中将证书内容添加为 X-ARR-ClientCert header。