将X509Certificate2存储在DB中

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

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

var cert = new X509Certificate2(filename); var data = cert.RawData; // save data to database... // Fetch data from database... cert = new X509Certificate2(data); 

使用.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将始终剥离它)。