是否可以将X509Certificate2存储在SQL Server表中,而不是从文件系统中获取.p12文件?我相信可以实现,但不确定如何操作。
是否可以将X509Certificate2存储在SQL Server表中,而不是从文件系统中获取.p12文件?我相信可以实现,但不确定如何操作。
var cert = new X509Certificate2(filename);
var data = cert.RawData;
// save data to database...
// Fetch data from database...
cert = new X509Certificate2(data);
保存方法如下:
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 VARCHAR(MAX) in the DB, it's just a Base64/ASCII string now.
从数据库中取回数据后,只需执行以下操作即可进行恢复:
var certBytes = Convert.FromBase64String(stringOfCertWithPrivateKey);
var cert = new X509Certificate2(certBytes);
使用 Export()
比使用 .RawData
更好,因为您可以选择是否持久化私钥(使用 .RawData 将始终剥离它)。
您可以将结果的 Base64 字符串存储在 SQL 数据库中作为 VARCHAR(MAX)
类型,因为 Base64 字符串仅由 ASCII 字符组成(感谢这个答案)。
RawData
不包含FriendlyName
属性。 - Borislav Ivanov