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

有帮助吗?

解决方案

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

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

// save data to database...

// Fetch data from database...

cert = new X509Certificate2(data);

其他提示

使用。出口()然后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.

然后,只需与恢复(得到它从DB回来之后):

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

使用导出()比.RawData更好,因为你可以选择坚持私钥或没有(使用.RawData永远剥夺它)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top