我想开发一个ASP.net网站读取则ClientCertificate,以确保智能卡来访问网站(试图用用户名/密码登录做掉)。智能卡安全性,您如何认证证书不是假的?
的过程中,我在我的脑海是:
- 用户注册一个账号和C#记录用户的clientCertificate(公共)。然后
- 用户可以登录与同一clientCertificate接下来的时间,而他们现在的身份验证的用户,如果哈希有效。
- 我将使用下面的代码,以确保证书的真实性。浏览器应该处理私钥并确保证书不被伪造。
- 基于Subject +证书组合,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???
这是认证过程中应如何智能卡工作???
是的,我将客户端证书(智能卡)与具有更高特权的数据库帐户连接起来。我必须100%确定,智能卡实际上属于他们,而不仅仅是具有相同公钥的复制或伪造证书。 – Dexter 2012-04-20 15:41:03
好的,在这种情况下,使用Page.Request.ClientCertificate.Certificate获取请求证书对象(X509Certificate2)的属性,例如“x509Cert2.Subject”。但是,将验证片留给IIS。如果客户端提交了一个错误的证书,你的asp.net代码甚至不会执行,因为IIS会拒绝它。 – Ulises 2012-04-20 15:45:19
那么我的代码是正确的呢?我只是检查散列和证书是否有效(certificate.IsValid),并且可能将其放在try {} catch {}中,这足以确保该人拥有正确的智能卡?捕获将触发,我可以通过登录失败,因为代码无法获取证书(因为它是假的)。 – Dexter 2012-04-20 15:50:36