是否可以在SQL Server表中存储X509Certificate2而不是从文件系统中提取.p12文件?我相信你可以但不知道如何解决这个问题。
答案 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)
要保存它:
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将始终删除它)。