客户端证书如何用于身份验证(在 Web API 中)

信息安全 验证 证书 asp.net-mvc api
2021-09-06 04:17:01

我已经在这个场景上工作了一周。我已经使用以下链接实现了验证客户端证书的代码:http ://www.asp.net/web-api/overview/security/working-with-ssl-in-web-api 。

还有几个问题:

  1. 如何验证请求证书仅来自授权客户端?(我知道使用私钥,但如何?)
  2. 目前我正在使用自签名 SSL 和客户端证书。从哪里以及如何获得受信任的证书?(我知道,来自 CA,但实际过程是什么?)
  3. 如何向我信任的客户颁发客户证书?

对于上述问题,我有很多环答案。对于上述问题,我需要一个清晰的答案。我正在使用 ASP.NET 4.5 (webAPI)。

任何帮助将不胜感激。

1个回答

相互 TLS(又名客户端身份验证)是对此的解决方案。

至于颁发证书,我不会那样做。我会从客户端获取自签名证书,并以某种方式将它们直接固定给委托人(用户)。我将有一个由通用名称和证书公钥索引的查找表来执行此操作。这使得证书撤销(删除行)和 CA 妥协(不涉及)等潜在问题变得更加容易。

或者,您可以向客户请求 CSR 并使用您信任的 CA(如果您的组织具有适当保护它的专业知识和资源,则可以是第三方或您自己的内部 CA)签署它们。

这是来自 The Code Project 的一个很好的高级描述,他们有 .NET 示例代码来演示它:

相互SSL认证或基于证书的相互认证是指双方通过验证提供的数字证书来相互认证,从而确保双方的身份。在技​​术方面,它是指客户端(Web 浏览器或客户端应用程序)向服务器(网站或服务器应用程序)验证自己,并且该服务器还通过验证受信任证书颁发的公钥证书/数字证书向客户端验证自己当局 (CA)。由于身份验证依赖于数字证书,因此 Verisign 或 Microsoft Certificate Server 等证书颁发机构是相互身份验证过程的重要组成部分。从高层的角度来看,

  1. 客户端请求访问受保护的资源。
  2. 服务器将其证书提供给客户端。
  3. 客户端验证服务器的证书。
  4. 如果成功,客户端将其证书发送到服务器。
  5. 服务器验证客户端的凭据。
  6. 如果成功,服务器将授予对客户端请求的受保护资源的访问权限。

来源: http: //www.codeproject.com/Articles/326574/An-Introduction-to-Mutual-SSL-Authentication