私は、スマートカードがWebサイトにアクセスするために使用されたことを確認するために、clientCertificateを読み取るASP.netサイトを開発しようとしています(ユーザー名/パスワードのログインをやめようとしています)。スマートカードのセキュリティ、どのように証明書を偽物ではないと認証しますか?
私は私の心を持っているプロセスは、次のとおりです。
- ユーザーアカウントを登録し、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
その場合、要求証明書オブジェクト(X509Certificate2)のプロパティをPage.Request.ClientCertificate.Certificate(「x509Cert2.Subject」など)で取得します。ただし、検証部分をIISのままにしておきます。クライアントが不正な証明書を提示すると、IISがそれを拒否するため、asp.netコードは実行されません。 – Ulises
私のコードは正しいですか?私は、ハッシュと証明書が有効かどうか(certificate.IsValid)をチェックし、try {} catch {}に入れて、その人が正しいスマートカードを持っていることを確認するのに十分でしょうか?キャッチがトリガーされ、コードが証明書を取得できなかったため(私は偽造品なので)、ログインに失敗する可能性があります。 – Dexter