7

是否可以将 X509Certificate2 存储在 SQL Server 表中,而不是从文件系统中提取 .p12 文件?我相信你可以,但不确定如何去做。

4

2 回答 2

11

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

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

// save data to database...

// Fetch data from database...

cert = new X509Certificate2(data);
于 2010-02-10T21:36:33.033 回答
5

使用 .Export() 然后 Convert.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 将始终剥离它)。

于 2016-05-27T00:55:14.543 回答