使用 X509 证书指纹进行用户身份验证
using X509 certificate thumbprint for user authentication
是否可以使用证书指纹来验证和唯一标识用户?以下是我试图解决的用例:
我计划公开基于 Rest 的端点,预计将由基于 WPF 客户端的应用程序使用。作为入职流程的一部分,客户端计算机还应安装为新客户端创建的 X509 证书。证书指纹和用户映射是我计划在我们这边安全存储的(比如使用 azure key vault)
现在,每当收到 API 服务请求时 - 我的身份验证管理器将提取与该 http 请求一起附加的证书,并将使用相应的指纹从映射存储中获取用户信息,如上所述。
如果未找到匹配项 - 服务器将返回 HTTP 401 未授权状态代码。
我想了解整个用户身份验证过程是否存在任何缺点、漏洞或缺陷?
其他信息:服务是使用 ASP.NET MVC 应用程序框架构建的,并托管在 IIS 上。
注意:请不要建议基于 AAD/token 的身份验证 - 我已经评估了这些选项并决定不使用它(不是因为任何技术挑战,而是因为因为我无法在这里解释的因素)
您的建议类似于证书固定。这在很大程度上取决于您的客户端证书管理。客户端证书有时会过期,有时会过期 lost/stolen 等等。如果您可以在您的网站之外处理证书更换 API 并使其与内部数据库保持同步,它就足够可靠了。
但是,我建议对证书执行额外的检查(例如,Subject Alternative Names 扩展中的 UPN 值)以减少指纹冲突的可能性(目前,Microsoft 使用 SHA1 进行指纹计算)。
是否可以使用证书指纹来验证和唯一标识用户?以下是我试图解决的用例:
我计划公开基于 Rest 的端点,预计将由基于 WPF 客户端的应用程序使用。作为入职流程的一部分,客户端计算机还应安装为新客户端创建的 X509 证书。证书指纹和用户映射是我计划在我们这边安全存储的(比如使用 azure key vault)
现在,每当收到 API 服务请求时 - 我的身份验证管理器将提取与该 http 请求一起附加的证书,并将使用相应的指纹从映射存储中获取用户信息,如上所述。
如果未找到匹配项 - 服务器将返回 HTTP 401 未授权状态代码。
我想了解整个用户身份验证过程是否存在任何缺点、漏洞或缺陷?
其他信息:服务是使用 ASP.NET MVC 应用程序框架构建的,并托管在 IIS 上。
注意:请不要建议基于 AAD/token 的身份验证 - 我已经评估了这些选项并决定不使用它(不是因为任何技术挑战,而是因为因为我无法在这里解释的因素)
您的建议类似于证书固定。这在很大程度上取决于您的客户端证书管理。客户端证书有时会过期,有时会过期 lost/stolen 等等。如果您可以在您的网站之外处理证书更换 API 并使其与内部数据库保持同步,它就足够可靠了。
但是,我建议对证书执行额外的检查(例如,Subject Alternative Names 扩展中的 UPN 值)以减少指纹冲突的可能性(目前,Microsoft 使用 SHA1 进行指纹计算)。