如何在.net中对HTTPS请求进行数字签名?

时间:2011-01-14 04:44:40

标签: .net ssl https digital-signature

是否有内置程序使用.net中的客户端SSL私钥对HTTPS请求进行数字签名?此外,是否有内置程序来验证SSL证书的数字签名?或者我必须自己动手?或者是否有第三方图书馆?

我要签名的数据是普通的HTTP表单请求。例如,我提供此地址以扣除卡的余额:

https://myserver/deduction

客户端会将HTTP表单发布到该地址,其中包含card = 1234567890123456,currency = 1,amount = 1000等数据。此数据是我希望客户签名的数据。

我需要对请求进行数字签名,因为客户端操纵资金,所以我想确保请求真的来自客户端并且没有人篡改请求的内容。

我也在考虑使用SSL客户端证书,但它只能提供机密性和身份验证,但不能提供数据完整性。

1 个答案:

答案 0 :(得分:1)

这里似乎有一个完整的示例代码如何在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");
    }
}