Pregunta

¿Es posible almacenar una X509Certificate2 en una tabla de SQL Server en lugar de tirar de un archivo .p12 del sistema de archivos? Estoy seguro de que puede, pero no está seguro de cómo hacer esto.

¿Fue útil?

Solución

Este es, sin duda posible, el X509Certificate2 tiene un RawData propiedad que se puede guardar en su base de datos SQL. Para reconstruir el certificado puede utilizar esta constructor

var cert = new X509Certificate2(filename);
var data = cert.RawData;

// save data to database...

// Fetch data from database...

cert = new X509Certificate2(data);

Otros consejos

Uso .export () entonces Convert.ToBase64String () y guardar como NVARCHAR (MAX)

Para guardarlo:

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.

A continuación, sólo restaurar (después de conseguir de nuevo de DB) con:

var certBytes = Convert.FromBase64String(stringOfCertWithPrivateKey);
var cert = new X509Certificate2(certBytes);

Uso de exportación () es mejor que .RawData ya que puede elegir para persistir la clave privada o no (usando .RawData siempre se tira de él).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top