如何在 C# 中实现获取证书私钥字符串?
作者:互联网
示例代码
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
class Program
{
static void Main(string[] args)
{
// 证书文件路径和密码
string certPath = @"C:\path\to\your\apiclient_cert.p12"; // 替换为实际证书路径
string certPassword = "YOUR_CERT_PASSWORD"; // 替换为实际证书密码
// 获取私钥字符串
string privateKeyString = GetPrivateKeyString(certPath, certPassword);
Console.WriteLine("Private Key String:");
Console.WriteLine(privateKeyString);
}
public static string GetPrivateKeyString(string certPath, string certPassword)
{
// 加载证书
X509Certificate2 certificate = new X509Certificate2(certPath, certPassword, X509KeyStorageFlags.MachineKeySet);
// 获取私钥并转为字符串
using (RSA rsa = certificate.GetRSAPrivateKey())
{
if (rsa == null)
throw new InvalidOperationException("Unable to retrieve private key.");
// 导出私钥为字节数组
var privateKeyBytes = rsa.ExportRSAPrivateKey(); // .NET 5.0 或更高版本使用
// var privateKeyBytes = rsa.ExportParameters(true).ToString(); // 在 .NET Framework 中可用
// 转换为 PEM 格式
StringBuilder sb = new StringBuilder();
sb.AppendLine("-----BEGIN PRIVATE KEY-----");
sb.AppendLine(Convert.ToBase64String(privateKeyBytes, Base64FormattingOptions.InsertLineBreaks));
sb.AppendLine("-----END PRIVATE KEY-----");
return sb.ToString();
}
}
}
C#
关键注意事项
-
PEM 格式:示例中的代码生成了 PEM 格式的私钥,适用于许多需要此格式的场景。
-
RSA私钥导出:
- 在 .NET Core 或 .NET 5.0 及更高版本中,使用
rsa.ExportRSAPrivateKey()
方法。 - 对于较旧的 .NET Framework 版本,您可能无法直接导出为字节数组,需要手动构建或使用
RSAParameters
。
- 在 .NET Core 或 .NET 5.0 及更高版本中,使用
-
证书加载:
- 确保证书路径和密码正确,以成功加载证书。
注意事项
- 只在安全的环境和条件下存储和处理私钥字符串,避免泄露,以防止潜在的安全风险。
标签: 来源: