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;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?