Как я могу загрузить клиентские сертификаты из личного хранилища, используя ASP.NET? - PullRequest
2 голосов
/ 09 ноября 2011

Как я могу загрузить клиентские сертификаты из личного хранилища, используя 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";
                }
            }
        }
    }
}

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

Для всех пользователей Google:

Добавьте это к вашему Web.Config:

<identity impersonate="true" /> 

Для получения дополнительной информации см. msdn об олицетворении .

0 голосов
/ 09 ноября 2011

Полагаю, вы запустили это приложение ASP.NET.в качестве тестового набора, и на самом деле вы не намерены писать производственное приложение, которое обращается к личному сертификату.хранить на веб-сервере?Я вообще не изучал и не проверял ваш код, но я бы в первую очередь проверил привилегии безопасности.Я ожидаю, что учетная запись, под которой работает рабочий процесс ASP.Net, не имеет доступа к личному сертификату.хранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...