c# 证书操作代码
/// <summary>
/// 证书帮助类
/// </summary>
public class CertificateHelper
{
private static X509Certificate2 _cert;
/// <summary>
/// 证书文件转Base64
/// </summary>
/// <param name="CertificateUrl">证书文件路径</param>
/// <returns></returns>
public static byte[] CertificateBase64(string CertificateUrl)
{
System.Net.HttpWebRequest request = System.Net.HttpWebRequest.Create(CertificateUrl) as System.Net.HttpWebRequest;
request.Method = "GET";
//request.ContentType = "application/x-pkcs12";
//request.ProtocolVersion = new Version(1, 1);
System.Net.HttpWebResponse response = request.GetResponse() as System.Net.HttpWebResponse;
System.IO.Stream stream = response.GetResponseStream();
MemoryStream outstream = new MemoryStream();
const int bufferLen = 4096;
byte[] buffer = new byte[bufferLen];
int count = 0;
while ((count = stream.Read(buffer, 0, bufferLen)) > 0)
{
outstream.Write(buffer, 0, count);
}
outstream.Seek(0, SeekOrigin.Begin);
int buffsize = (int)outstream.Length;
byte[] bytes = new byte[buffsize];
outstream.Read(bytes, 0, buffsize);
outstream.Close();
outstream.Dispose();
stream.Close();
stream.Dispose();
return bytes;
}
public static X509Certificate2 GetCertHelper(string certUrl,string password)
{
if(_cert == null)
{
var certificate = CertificateBase64(certUrl);
_cert = new X509Certificate2(certificate, password, X509KeyStorageFlags.MachineKeySet);
}
return _cert;
}
/// <summary>
/// 获取证书中的公钥
/// </summary>
/// <param name="certUrl"></param>
/// <returns></returns>
public static string GetRSAPublickey(string certUrl, string password)
{
var cert = GetCertHelper(certUrl,password);
var publickey = cert.PublicKey.Key.ToXmlString(false);
return publickey;
}
/// <summary>
/// 获取证书中的私钥
/// </summary>
/// <param name="certUrl"></param>
/// <returns></returns>
public static string GetRSAPrivatekey(string certUrl, string password)
{
var cert = GetCertHelper(certUrl, password);
var privatekey = cert.PrivateKey.ToXmlString(false);//私钥获取
return privatekey;
}
/// <summary>
/// 处理证书
/// </summary>
/// <param name="request"></param>
/// <param name="certUrl"></param>
/// <param name="mchId"></param>
private static void CommandCert(HttpWebRequest request, string certUrl = "", string mchId = "")
{
//证书路径
if (!certUrl.IsNullOrEmpty())
{
if (mchId.IsNullOrEmpty())
{
throw new Exception("MchId不能为空");
}
var certs = new X509CertificateCollection();
if (certUrl.IndexOf("http") == 0)
{
var certificate = CertificateHelper.CertificateBase64(certUrl);
certs.Add(new X509Certificate2(certificate, mchId, X509KeyStorageFlags.MachineKeySet));
}
else
{
certs.Add(new X509Certificate2(UrlHelper.GetUrl(certUrl), mchId, X509KeyStorageFlags.MachineKeySet));
}
request.ClientCertificates = certs;
}
}
/// <summary>
/// 处理网络,linux跟windows路径
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string GetUrl(string url)
{
if (url.IndexOf("http") == 0)
{
return url;
}
else
{
var currentPath = Directory.GetCurrentDirectory();
var path = Path.Combine(currentPath, url);
if (currentPath.Contains("\\"))
{
path = path.Replace("/", "\\");
}
else if (currentPath.Contains("/"))
{
path = path.Replace("\\", "/");
}
return path;
}
}
}

浙公网安备 33010602011771号