Вопрос

Можно ли сохранить 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);

Другие советы

Используйте .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 всегда приведет к его удалению).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top