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

我嘗試加載訪問者證書,注意:我的所有訪問者都在Intranet網絡中,並且都在活動目錄中登錄 –

+0

好的。你如何驗證你的用戶?他們是否被冒充了? –

回答

0

。作爲一個測試工具,它實際上並不打算編寫一個訪問個人證書的生產應用程序。存儲在Web服務器上?我還沒有研究或測試過你的代碼,但我會在第一時間檢查安全特權。我預計運行ASP.Net工作進程的帳戶無法訪問個人證書。商店。

+0

1 /你必須知道,我需要加載客戶端存儲上的「個人」證書不在網絡服務器商店 2 /是的,這不是一個生產版本,我只是測試這個代碼來實現實際應用 3 /什麼是asp.net必須破壞加載客戶端證書的帳戶? –

+0

多年以來,我一直沒有對cert存儲做任何事情,但我認爲,它似乎有道理,即要訪問個人存儲中的證書,您需要在將證書導入到該存儲中的帳戶下運行。我建議您在控制檯應用程序中運行測試工具。在您用於導入證書的相同帳戶下。進入商店。 –

1

對於所有的Google:

添加到您的Web.Config

<identity impersonate="true" /> 

欲瞭解更多信息,請參閱msdn on impersonation