2

ASP.NETを使用して個人ストアからクライアント証明書をロードするにはどうすればよいですか?ASP.NETを使用して個人ストアからクライアント証明書をロードするにはどうすればよいですか?

可能であれば、データを暗号化できますか?

私はASP.NET 2.0でアプリケーションを作成し、クライアント証明書ストアにインストールされているすべての証明書を取得してデジタル署名を作成しました。

が、それは動作しません、と私はあなたがこのASP.NETアプリケーションをノックしている推測している問題

// ... 
using System.Security.Cryptography.X509Certificates; 

namespace WebApplication4 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     public static string ToHexString(byte[] bytes) 
     { 
      // ... 
     } 

     protected void btnSignature_Click(object sender, EventArgs e) 
     { 
      X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
      store.Open(OpenFlags.OpenExistingOnly); 
      X509Certificate2Collection certificates = store.Certificates; 

      int a = certificates.Count; 

      lbCertCount.Text = System.Convert.ToString(a); 

      if (a > 0) 
      { 
       X509Certificate2 certificate = certificates[1]; 

       string publicKey = certificate.GetPublicKeyString(); 
       lbMypublicKey.Text = publicKey + "<br/>"; 

       // AsymmetricAlgorithm privateKey = certificate.PrivateKey; 

       RSACryptoServiceProvider privateKey = certificate.PrivateKey as RSACryptoServiceProvider; 

       // test message 
       byte[] buffer = Encoding.Default.GetBytes("Welcome"); 
       byte[] signature = privateKey.SignData(buffer, new SHA1Managed()); 
       string me = ToHexString(signature); 

       lbSignature.Text = me; 


       RSACryptoServiceProvider publicKey1 = certificate.PublicKey.Key as RSACryptoServiceProvider; 

       bool verify = publicKey1.VerifyData(buffer, new SHA1Managed(), signature); 

       if (verify == true) 
       { 
        lbControl.Text = "Signature valid"; 
       } 
       else 
       { 
        lbControl.Text = "Signature not Valid"; 
       } 
      } 
     } 
    } 
} 
+0

サーバー上の訪問者証明書またはユーザーアカウントの証明書を読み込もうとしていますか? –

+0

私は訪問者の証明書を読み込もうとします。注意:私のすべての訪問者はイントラネットネットワークに属し、すべてがアクティブなディレクトリに記録されています –

+0

ユーザーをどのように認証しますか?彼らは偽装されていますか? –

答えて

0

が何であるかを知りません。テストハーネスとして、個人的な証明書にアクセスするプロダクションアプリケーションを書くことは実際にあなたの意図ではありません。 Webサーバーに保存しますか?私はあなたのコードを勉強したりテストしたりしていませんが、最初にセキュリティ特権をチェックします。私は、ASP.Netワーカープロセスが実行しているアカウントは個人証明書にアクセスできないと考えています。格納。すべてのGooglerのために

+0

1 /あなたは、クライアントストアの証明書をWebサーバーストアではなく「個人」にロードする必要があることを知っておく必要があります。 2 /はい、本番版ではありません。 3 /クライアント証明書を読み込むためにasp.netが台無しにならなければならないアカウントは何ですか? –

+0

私は長年にわたり証明書ストアで何もしていませんでしたが、私は信じています。個人ストアの証明書にアクセスするには、証明書をそのストアにインポートしたアカウントで実行する必要があります。コンソールアプリケーションでテストハーネスを実行することをお勧めします。証明書をインポートするのに使用したのと同じアカウントでストアに入れます。 –

1

は、あなたのWeb.Configにこれを追加します。

<identity impersonate="true" /> 

詳細については、msdn on impersonationを参照してください。

関連する問題