Magasin de Certificat X509 dans la base de données
Afin d'accéder au service web j'ai besoin d'un certificat.
J'ai généré mon certs:
openssl genrsa 1024 > private.key
openssl req -new -x509 -nodes -sha1 -days 1100 -key private.key > public.cer
ensuite fusionné ce deux en un pfx certificat par
openssl pkcs12 -in public.cer -inkey private.key -export -out client.pfx
puis chargé mon fichier pfx comme X509Certificate2
X509Certificate2 clientCert = new X509Certificate2("cert.pfx", "password");
Maintenant, je voudrais créer une table dans la base de données qui contient les champs suivants:
PrivateKey NVARCHAR
PublicCer NVARCHAR
Password NVARCHAR
Puis copiez le contenu du privé.fichier de clé, avec -----BEGIN CERTIFICATE - - - - -- - - - END CERTIFICATE-----, de même pour le public.cer, et le mot de passe.
Maintenant, comment puis-je obtenir un bon exemple de X509Certificate2 par la lecture de ces données à partir de DB?
En d'autres termes, comment puis-je générer un fichier pfx de code, basé sur la clé privée et le certificat?
Je vais essayer d'être plus précis:
string connectionString; string query; string cert;
connectionString = ConfigurationManager.ConnectionStrings[0].ConnectionString;
query = "SELECT clientcert FROM settings_services WHERE ID = 1";
using (SqlConnection cn = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand(query, cn);
cn.Open();
cert = (string)cmd.ExecuteScalar();
}
X509Certificate2 serverCert = new X509Certificate2(Encoding.UTF8.GetBytes(cert));
Ce code va charger correctement un certificat de chaîne de caractères (certificat x509, en commençant avec -----BEGIN CERTIFICATE----- et la fin -----END CERTIFICATE-----).
Maintenant, j'ai besoin d'obtenir la clé privée:
Ma clé privée est au RSA format (-----BEGIN RSA PRIVATE KEY---- etc...)
J'ai besoin de le charger, et de l'attribuer à serverCert, afin d'être en mesure d'utiliser ce certificat pour s'authentifier sur le service web.
Des suggestions sur la façon de le faire?
Connexes: stackoverflow.com/questions/893757
OriginalL'auteur | 2011-02-08
Vous devez vous connecter pour publier un commentaire.
Donc c'est effectivement facile, bien que je n'ai pas trouvé simple description de celui-ci. J'ai quitté le cert chaînes dans mon gist (exemple de certificat, pas de données sécurisées)
https://gist.github.com/BillKeenan/5435753
OriginalL'auteur Monsters X
Vous avez un constructeur avec un byte[]. Ainsi, vous pouvez stocker votre certificat comme un tableau d'octets et de charger votre certificat avec
lien: http://msdn.microsoft.com/en-us/library/ms148413%28v=VS.100%29.aspx
C'est un détail que vous devriez inclure dans votre question. En tout cas, le truc entre les
-----BEGIN CERTIFICATE-----
et-----END CERTIFICATE-----
est juste des données encodées en Base64. Un bon endroit pour commencer peut-être en cours d'exécution le texte par le biaisCovert.FromBase64String()
.Ce n'est pas réellement l'air de fonctionner, en dépit de ce que dit la documentation. L'erreur est CryptographicException: Impossible de trouver l'objet demandé
OriginalL'auteur alexl