将X509Certificate2存储在DB中

时间:2010-02-10 20:38:41

标签: c# x509certificate

是否可以在SQL Server表中存储X509Certificate2而不是从文件系统中提取.p12文件?我相信你可以但不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:8)

这绝对是可能的,X509Certificate2具有RawData属性,可以保存到SQL数据库中。要重建证书,您可以使用此constructor

var cert = new X509Certificate2(filename);
var data = cert.RawData;

// save data to database...

// Fetch data from database...

cert = new X509Certificate2(data);

答案 1 :(得分:4)

使用.Export()然后转换.ToBase64String()并另存为NVARCHAR(MAX)

要保存它:

var cert = new X509Certificate2(filename);
var stringOfCertWithPrivateKey = Convert.ToBase64String(cert.Export(X509ContentType.Pkcs12));

// Or as a regular cert, which will strip the private key out
var stringOfCertWithoutPrivateKey = Convert.ToBase64String(cert.Export(X509ContentType.Cert));

// Save either string as NVARCHAR(MAX) in the DB, it's just a string now.

然后使用以下命令恢复(从数据库获取后)

var certBytes = Convert.FromBase64String(stringOfCertWithPrivateKey);
var cert = new X509Certificate2(certBytes);

使用Export()优于.RawData,因为您可以选择是否保留私钥(使用.RawData将始终删除它)。