如何使用ASP.NET从个人存储库加载客户端证书

本文关键字:存储 加载 客户端 证书 何使用 ASP NET | 更新日期: 2023-09-27 18:14:00

如何使用ASP.NET从个人存储库加载客户端证书?

如果可能的话,我可以用它加密数据吗?

为此,我用ASP创建了一个应用程序。. NET 2.0,检索安装在客户端证书存储库(个人)中的所有证书,以便用它创建数字签名。

但它不工作,我不知道是什么问题

// ...
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";
                }
            }
        }
    }
}

如何使用ASP.NET从个人存储库加载客户端证书

给所有google用户:

添加到您的Web.Config:

<identity impersonate="true" /> 

有关详细信息,请参阅msdn on impersonation。

我猜你已经敲了这个ASP。NET应用程序作为一个测试工具,它实际上不是你的意图编写一个生产应用程序,访问个人证书存储在web服务器上?我没有研究或测试你的代码,但我会检查安全特权在第一个实例。我期望在ASP下的账户。正在运行的网络工作者进程没有访问个人证书存储的权限。