gpt4 book ai didi

asp.net-core - 验证客户端证书

转载 作者:行者123 更新时间:2023-12-04 17:41:44 27 4
gpt4 key购买 nike

在我的项目中,我需要为每个用户的请求检查和验证客户端证书,然后授予他们调用我的 API 的权限。我的用户是机器(其他 API 或库)。他们将证书附加到他们的请求并将其发送到我的托管 API。我实现了自定义身份验证处理程序并成功检索了客户端证书。现在,我将客户端证书与 appsetting.json 中的有效证书列表(指纹、颁发者和序列号)进行比较。如果这三个属性都与客户端认证相同,我返回 return Task.FromResult(AuthenticateResult.Success(ticket)); 否则我返回return Task.FromResult(AuthenticateResult.Fail("证书无效"));

一切正常,但我对验证客户端证书的方式感觉不太好。我想知道是否有验证客户端证书的优雅方法而不是我在 ASP.NET CORE 中的解决方案。

最佳答案

颁发者和序列号可由攻击者控制,因此它们不适合用于验证目的。

指纹是 SHA1 of multiple properties of the certificate ,包括发行人、序列号、公钥。这可能没问题,目前,.NET 无法更改,因为它是 Windows 功能,但指纹仅供引用,而非安全性。

更好的方法是比较证书签名和散列,并将最低质量放在 SHA256 或更高的散列上。 cert.SignatureAlgorithm.Value; 会给你算法作为 OID,然后你可以用它新建一个 System.Security.Cryptography.Oid 并使用 FriendlyName 属性以文本形式获取算法,但不支持获取实际签名,您必须恢复到 BouncyCaSTLe 等第 3 方。所以这可能已经过时了,因为为此依赖似乎很愚蠢。

这实际上归结为您如何注册客户端证书。我要做的是索取证书(或者在某处有一个注册过程,比如 nuget 有签名证书),将它们放入 X509Certificate2 类,然后创建 RawData 属性的 SHA256 哈希并将其添加到您的允许列表。然后对传入的客户端证书执行相同操作,并将来自入站证书的原始数据的 SHA256 与您的允许列表进行比较。当然现在你必须应对证书过期......

关于asp.net-core - 验证客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54219184/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com