如何在 .net 中对 HTTPS 请求进行数字签名?
Posted
技术标签:
【中文标题】如何在 .net 中对 HTTPS 请求进行数字签名?【英文标题】:How do I digitally sign an HTTPS request in .net? 【发布时间】:2011-01-14 04:44:39 【问题描述】:.net 中是否有使用客户端 SSL 私钥对 HTTPS 请求进行数字签名的内置程序?此外,是否有内置程序可以根据 SSL 证书验证数字签名?还是我必须自己动手?还是有第三方库?
我要签名的数据是普通的 HTTP 表单请求。例如,我提供此地址以扣除卡的余额:
https://myserver/deduction
客户端将向该地址发布一个 HTTP 表单,其中包含 card=1234567890123456、currency=1、amount=1000 等数据。这些数据是我希望我的客户端签署的数据。
我需要对请求进行数字签名,因为客户操纵金钱,所以我想确保请求确实来自客户,并且没有人篡改请求的内容。
我也在考虑使用SSL客户端证书,但它只能提供机密性和身份验证,不能提供数据完整性。
【问题讨论】:
使用 X509Certificate2 和 RSACryptoServiceProvider 应该可以解决问题。您能否解释一下您要加密的数据类型。 @Lars 我为我的问题添加了更多解释 为什么不让您的网络服务器 IIS 来处理 ssl 加密? @Pauli 实际上我的问题是关于数字签名,而不是加密 啊,现在我明白了...有点像使用证书签名进行身份验证? 【参考方案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");
【讨论】:
感谢您的链接。所以就我而言,首先我必须序列化我的 HTTP 表单数据,然后对序列化的字符串进行签名(IOW 滚动我自己的签名程序)以上是关于如何在 .net 中对 HTTPS 请求进行数字签名?的主要内容,如果未能解决你的问题,请参考以下文章
防止在 asp.net 5 (vNext) 中对预检 OPTIONS 请求进行基于令牌的授权