Stocker un X509Certificate2 dans DB
-
19-09-2019 - |
Question
Est-il possible de stocker un X509Certificate2 dans une table SQL Server plutôt que tirer un fichier .p12 du système de fichiers? Je suis sûr que vous pouvez, mais ne savez pas comment s'y prendre.
La solution
est sans aucun doute possible, le X509Certificate2 a propriété de RawData qui peut être sauvegardé dans votre base de données SQL. Pour reconstruire le certificat que vous pouvez utiliser cette constructeur
var cert = new X509Certificate2(filename);
var data = cert.RawData;
// save data to database...
// Fetch data from database...
cert = new X509Certificate2(data);
Autres conseils
Utilisez .EXPORT () Convert.ToBase64String puis () et enregistrer en tant que NVARCHAR (MAX)
Pour enregistrer:
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.
Alors que la restauration (après l'avoir obtenu de retour de DB) avec:
var certBytes = Convert.FromBase64String(stringOfCertWithPrivateKey);
var cert = new X509Certificate2(certBytes);
Utiliser export () est meilleur que .RawData que vous pouvez choisir de persister la clé privée ou non (à l'aide .RawData dépouillera toujours).
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow