¿Es posible almacenar un X509Certificate2 en una tabla de SQL Server en lugar de extraer un archivo .p12 del sistema de archivos? Estoy seguro de que puedes, pero no estoy seguro de cómo hacerlo.Almacenar un X509Certificate2 en DB
7
A
Respuesta
8
Esto es definitivamente posible, el X509Certificate2 tiene una propiedad RawData 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);
3
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.
Entonces simplemente restaure (después de recuperarlo de DB) con:
var certBytes = Convert.FromBase64String(stringOfCertWithPrivateKey);
var cert = new X509Certificate2(certBytes);
Usando Exportar() es mejor que .RawData, ya que puede optar por mantener la clave privada o no (con .RawData siempre lo quitará).
+0
Gracias jezpez, esto era exactamente lo que necesitaba. ¡Muy limpio también! – Memetican
Cuestiones relacionadas
- 1. Cómo almacenar cadena JSON en MySQL db
- 2. log4net: Cómo almacenar datos en DB
- 3. ¿Es seguro almacenar un PHP crypt() resultado en el db?
- 4. BouncyCastle PrivateKey Para X509Certificate2 PrivateKey
- 5. RemoteCertificateValidationCallback con X509Certificate2
- 6. Cómo crear un dummy mínimo X509Certificate2?
- 7. ¿Cómo almacenar texto largo en MySql DB usando Rails?
- 8. Longitud MIMET máxima al almacenar tipo en DB
- 9. cómo crear un x509Certificate2 completamente nuevo en .net?
- 10. Cómo comparar dos X509Certificate2 C#
- 11. mejor manera de almacenar correo en DB (postfix)
- 12. Almacenar grandes cantidades de datos: ¿DB o sistema de archivos?
- 13. Cómo verificar un X509Certificate2 contra una cadena X509Certificate2Collection
- 14. ¿Qué tipo de columna se debe usar para almacenar datos serializados en un db mysql?
- 15. ¿Hay un idioma django para almacenar variables relacionadas con la aplicación en el DB?
- 16. ¿Cómo almacenar horas de un negocio en el db/modelo de una aplicación Rails?
- 17. Copiando la tabla en un db a otro db
- 18. Enumeraciones en DB o NO Enums en DB
- 19. ¿Cuál es la diferencia entre X509Certificate2 y X509Certificate en .NET?
- 20. ¿Cuánto espacio de disco se necesita para almacenar un valor NULL utilizando postgresql DB?
- 21. Almacenar ints en un diccionario
- 22. Cómo almacenar artículos pedidos que a menudo cambian de posición en DB
- 23. Cómo almacenar un NSArray en un NSDictionary?
- 24. Cómo hacer db dumpfile en django
- 25. ¿La mejor manera de initaite RSACryptoServiceProvider desde x509Certificate2?
- 26. Método correcto de PHP para almacenar caracteres especiales en MySQL DB
- 27. ¿Mongo DB tiene un modo en memoria?
- 28. Obteniendo Entidades de DB en un PropertyEditor
- 29. DB Schema para chats?
- 30. Almacenamiento de contenido de archivos en DB
por lo que todavía tiene que leer el flujo .p12 en un objeto y luego almacenar ¿verdad? No puedo simplemente abrir el archivo p12 y copiar su contenido y ponerlo en un campo varchar en una tabla llamada Cerficates y nunca más tener que volver a leer de un archivo físico. tal vez soy ingenuo – PositiveGuy
Ok, entonces RawData es una matriz de bytes. ¿Qué tipo de datos MS SQL usaría para almacenar una matriz de bytes ... binario? – PositiveGuy
Solo quiero leer una vez y no tener que almacenar ese archivo .p12 en el servidor. Creo que esa es la intención. Nuestro líder dice que no lo lea de un archivo sino de la base de datos. Supongo que eso significa que debería poder almacenar eso una vez en el DB y nunca tener que volver a leer el archivo. – PositiveGuy