我正在尝试开发一个读取 clientCertificate 的 ASP.net 站点,以确保使用智能卡访问该网站(试图取消用户名/密码登录)。
我脑海中的流程是:
- 用户注册一个账户,C#记录用户的clientCertificate(public)。
- 然后,用户下次可以使用相同的 clientCertificate 登录,如果哈希有效,他们现在是经过身份验证的用户。
- 我将使用下面的代码来确保证书的真实性。浏览器应该处理私钥并确保证书不是伪造的。
- 基于 Subject+certificate 的组合,C# 为他们分配了他们的角色访问权限。
以下代码可以用于证书的真实性吗?
X509Certificate x509Cert = new X509Certificate(Request.ClientCertificate.Certificate);
SHA1 sha = new SHA1CryptoServiceProvider();
byte[] hashvalue = sha.ComputeHash(Request.ClientCertificate.Certificate);
byte[] x509Hash = x509Cert.GetCertHash();
// compare x509Hash WITH hashvalue to ensure they are a match.
// If not, possibly faked certificate, not a real smartcard???
这是智能卡身份验证过程应该如何工作???