2013-01-08 1 views
2

J'ai importé un certificat dans une base de données SQL Server.Comment puis-je obtenir une clé publique de certificat à partir de SQL Server?

create certificate MyCertificate from file = 'c:\certificate.cer'; 

Maintenant, je veux récupérer la clé publique de ce certificat. Comment faire ?

Je peux faire

select * from sys.certificates 

mais il n'y a pas de colonne de clé publique.

Je sais que je peux l'enregistrer sur le disque par

backup certificate MyCertificate to file = 'c:\MyCertificate.cer'; 

mais ce n'est pas ce que je veux. J'ai juste besoin de base de données pour me dire clé publique ou en quelque sorte obtenir moi certificat complet mais je ne veux pas utiliser les fichiers.

EDIT:

Je voulais vérifier la signature numérique d'une ligne dans le tableau de base de données en utilisant SQL Server et un certificat. Mais puisque la fonction VerifySignedByCert ne vérifie pas la date d'expiration du certificat (selon cette note: Les fonctions intégrées de cryptage et de signature ne vérifient pas les dates d'expiration des certificats.) Les utilisateurs de ces fonctions doivent décider quand vérifier l'expiration du certificat dans http://msdn.microsoft.com/en-US/library/ms187798%28v=SQL.90%29.aspx) Je dois le faire manuellement en code C#.

C'est pourquoi je voulais obtenir une clé publique de certificat et une date d'expiration (que l'on peut trouver dans sys.certificates). Mais il semble que stocker le certificat dans une colonne varbinary dans une table est la meilleure option. Ou y a-t-il d'autres meilleures façons d'y parvenir?

Merci pour votre aide

Répondre

0

Les informations que vous recherchez réside dans la base de données maître dans la table syscerts. Cependant, il n'y a pas de moyen facile d'obtenir ces données. Si vous essayez d'obtenir les clés, peut-être que vous n'essayez pas d'utiliser le certificat dans le but dans lequel les certificats sont destinés à être utilisés par SQL Server?

Si vous essayez de stocker des certificats dans SQL Server sans les utiliser pour la sécurité de SQL Server, vous pouvez essayer de les stocker dans une colonne varbinary dans une table. Est-ce que quelque chose comme ça fonctionnerait pour vous?

Si vous donnez un peu plus d'informations sur ce que vous essayez d'accomplir, je pourrais peut-être vous aider un peu plus.

Voici un bon aperçu des certificats dans SQL Server: http://www.mssqltips.com/sqlservertip/1319/sql-server-2005-encryption-certificates-overview/

+0

Merci pour votre réponse. J'ai édité la question et ai ajouté plus de détails. – Harlsten

0

Créer une table create table Atm ( AID identité int, PIN varchar (300) ) INSERT INTO Atm (PIN) VALEURS (EncryptByCert (cert_id ('PinNumber1'), '473.429.000.000')) INSERT INTO Atm (PIN) VALEURS (EncryptByCert (cert_id ('PinNumber1'), '473.567.000.000')) INSERT INTO Atm (PIN) VALEURS (EncryptByCert (cert_id ('PinNumber1'), '4678904290000'))

Après cela créer un certificat comme suit: -

Créer un certificat PinNumber1 CRYPTAGE PAR MOT DE PASSE = '3e @ K80 * ^' AVEC SUJET = 'Ce numéro de Pin est Encrpted'

si vous voulez pour le déchiffrer plus tard alors: -

select convert (varchar (max), DecryptByCert (cert_id ('PinNumber1'), PIN, N'3e @ K80 *^')) de Atm où aid = 2

Questions connexes