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

时间:2017-04-27 20:57:12

标签: security ssl asp.net-web-api xamarin ssl-certificate

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

我将为WEB API创建HTTP证书。 Xamarin Forms应用程序将具有登录/密码以验证本地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项目中添加证书,对吧?我该如何添加?我该如何生成它? 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.我需要两者吗?

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

1 个答案:

答案 0 :(得分:4)

证书锁定和客户端证书身份验证是两个截然不同的事情。证书固定可确保您的应用与正在与之通信的服务器通信。它还可以防止被窃听,这被称为“中间人”。攻击。我刚刚写了一篇关于这个on my blog的文章。

客户端证书身份验证以相反的方式工作。它增加了额外的安全层,因此您的服务器可以确保只有拥有证书的客户端才能与其成功通信。但是,由于可以在不费力的情况下对应用程序进行反编译,因此该客户端证书可以轻松地“反复”。由恶意用户获取。所以这不是一颗银弹。

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

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

您包含的Web API链接看起来应该是第一眼就能正确执行服务器作业。本文还包括如何使用Powershell命令生成客户端证书。

生成客户端证书:

<强>安装:

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

<强>用法:

  • 这一切都取决于您使用的HttpClient。
  • 如果您使用提供的Web API解决方案,则应将证书内容添加为每个请求的X-ARR-ClientCert标头。