C# 证书签名
最近做webservice一直不顺,总结一下遇到的问题
1.证书签名。
由于发送的是XML报文数据,所以服务器端会根据证书签名验证发送的信息。就是客户端进行证书的私钥签名,服务器端进行公钥验证。
证书文件是.pfx格式的,包含私钥。
服务器端要求签名数据先进行MD5加密,再进行base64编码。
using System.Security.Cryptography.X509Certificates;//证书文件类
/// <summary>
/// 获取签名
/// </summary>
/// <param name="signsrc">将要签名的数据</param>
/// <returns>已签名的数据</returns>
public string GetSign(string signsrc)
{
try
{
//创建证书文件
X509Certificate2 objx5092 = new X509Certificate2(System.Web.HttpContext.Current.Server.MapPath("/Webservice/123.pfx"), "123");
//取出私钥
System.Security.Cryptography.RSACryptoServiceProvider rsa = objx5092.PrivateKey as System.Security.Cryptography.RSACryptoServiceProvider;
//将要签名的要素转化为byte[]
byte[] data = Encoding.ASCII.GetBytes(signsrc);
//md5 你懂的 返回byte[]
byte[] bb = rsa.SignData(data, "MD5");
//将md5 之后的数据进行base64编码 必须的 返回的就是已签名的数据
string strData = System.Convert.ToBase64String(bb);
return strData;
}
catch
{
return "";
}
/// 获取签名
/// </summary>
/// <param name="signsrc">将要签名的数据</param>
/// <returns>已签名的数据</returns>
public string GetSign(string signsrc)
{
try
{
//创建证书文件
X509Certificate2 objx5092 = new X509Certificate2(System.Web.HttpContext.Current.Server.MapPath("/Webservice/123.pfx"), "123");
//取出私钥
System.Security.Cryptography.RSACryptoServiceProvider rsa = objx5092.PrivateKey as System.Security.Cryptography.RSACryptoServiceProvider;
//将要签名的要素转化为byte[]
byte[] data = Encoding.ASCII.GetBytes(signsrc);
//md5 你懂的 返回byte[]
byte[] bb = rsa.SignData(data, "MD5");
//将md5 之后的数据进行base64编码 必须的 返回的就是已签名的数据
string strData = System.Convert.ToBase64String(bb);
return strData;
}
catch
{
return "";
}
}