Сохраните X509Certificate2 в БД.
-
19-09-2019 - |
Вопрос
Можно ли сохранить 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 всегда приведет к его удалению).
Не связан с StackOverflow