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

Lui*_*cia 0 security ssl ssl-certificate asp.net-web-api xamarin

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

我将为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.我两个都需要吗?

在此过程中,我还需要研究什么?

Tim*_*ers 5

证书固定和客户端证书身份验证是两件截然不同的事情。证书固定可确保您的应用与期望与之对话的服务器进行对话。它还可以防止窃听,这被称为“中间人”攻击。我最近在我的博客上写了一篇有关此的文章。

客户端证书认证以另一种方式起作用。它增加了一层额外的安全性,因此您的服务器可以确保只有拥有证书的客户端才能与它成功通信。但是,由于可以轻松地对应用进行反编译,因此恶意用户可以“轻松”获得此客户端证书。所以这不是灵丹妙药。

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

你应该同时使用吗?这确实取决于客户的需求,因为他们可以缓解2个非常不同的问题。

您包括的Web API链接看起来乍一看应该可以正确完成服务器工作。本文还包括如何使用Powershell命令生成客户端证书。

生成客户端证书:

安装:

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

用法:

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