Как мне подписать HTTPS-запрос в .net? - PullRequest
2 голосов
/ 14 января 2011

Существует ли встроенная процедура для цифровой подписи запроса HTTPS с помощью закрытого ключа SSL клиента в .net? Кроме того, есть ли встроенная процедура для проверки цифровой подписи по SSL-сертификату? Или я должен катиться самостоятельно? Или есть сторонняя библиотека?

Данные, которые я хочу подписать, представляют собой обычный запрос формы HTTP. Например, я предоставляю этот адрес для удержания баланса карты:

https://myserver/deduction

Клиент отправит на этот адрес форму HTTP с такими данными, как карточка = 1234567890123456, валюта = 1, сумма = 1000 и т. Д. Я хочу подписать этот клиент.

Мне нужно, чтобы запрос был подписан цифровой подписью, потому что клиент манипулирует деньгами, поэтому я хочу быть уверен, что запрос действительно исходит от клиента и никто не вмешивается в его содержание.

Я также рассматриваю возможность использования SSL-сертификата клиента, но он может обеспечить только конфиденциальность и аутентификацию, но не целостность данных.

1 Ответ

1 голос
/ 14 января 2011

Здесь, кажется, есть целый пример с кодом, как сделать базовую реализацию цифровой подписи в C # http://tutorial.visualstudioteamsystem.com/details.aspx?item=134

var MySigner = new DSACryptoServiceProvider();
string publicKey;

using (var file = new FileStream(args[0], FileMode.Open, FileAccess.Read))
{
    using (var reader = new BinaryReader(file))
    {
        var data = reader.ReadBytes((int)file.Length);

        var signature = MySigner.SignData(data);

        publicKey = MySigner.ToXmlString(false);
        Console.WriteLine("Signature: " + Convert.ToBase64String(signature));
    }
}

var verifier = new DSACryptoServiceProvider();
verifier.FromXmlString(publicKey);

using (var file = new FileStream(args[0], FileMode.Open, FileAccess.Read))
{
    using (var reader = new BinaryReader(file)) 
    { 
        byte[] data = reader.ReadBytes((int)file .Length);

        if (verifier.VerifyData(data, signature))
            Console.WriteLine("Signature");
        else
            Console.WriteLine("Signature is not verified");
    }
}
...