如何从SQL Server获取证书公钥?

时间:2013-01-08 13:33:53

标签: sql-server database certificate key public

我已将证书导入SQL Server数据库。

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

现在我想检索该证书的公钥。怎么做?

我能做到

select * from sys.certificates

但没有公钥栏。

我知道我可以通过

将其保存到磁盘
backup certificate MyCertificate to file = 'c:\MyCertificate.cer';

但那不是我想要的。我只需要数据库告诉我公钥或以某种方式获得我的整个证书,但我不想使用文件。

修改

我想使用SQL Server和证书验证数据库表中行的数字签名。但由于函数 VerifySignedByCert 不检查证书的到期日期(根据本说明:加密和签名的内置函数不检查证书的到期日期。这些函数的用户必须决定何时检查证书过期。http://msdn.microsoft.com/en-US/library/ms187798%28v=SQL.90%29.aspx中)我必须在C#代码中手动完成。

这就是为什么我想获得证书公钥和到期日期(可以在sys.certificates中找到)。但似乎将证书存储在表中的varbinary列中是最佳选择。或者还有其他更好的方法来实现这个目标吗?

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

您要查找的信息位于syscerts表的master数据库中。但是,没有简单的方法来获取该数据。如果您试图获取密钥,或许您不是试图将证书用于SQL Server要使用证书的目的吗?

如果您尝试在SQL Server中存储证书但不将它们用于SQL Server的安全性,那么您可能希望尝试将它们存储在表中的varbinary列中。这样的事情对你有用吗?

如果你提供一些关于你想要完成的事情的更多信息,我可以帮助你一点点。

以下是SQL Server中证书的概述:http://www.mssqltips.com/sqlservertip/1319/sql-server-2005-encryption-certificates-overview/

答案 1 :(得分:0)

创建一个表格  创建表自动取款机 ( AID int身份, PIN varchar(300) ) 插入Atm(PIN) VALUES(EncryptByCert(cert_id('PinNumber1'),'473429000000')) 插入Atm(PIN) VALUES(EncryptByCert(cert_id('PinNumber1'),'473567000000')) 插入Atm(PIN) VALUES(EncryptByCert(cert_id('PinNumber1'),'4678904290000'))

之后创建证书,如下所示: -

创建证书PinNumber1 密码加密='3e @ k80 * ^' WITH SUBJECT ='此Pin编号已加密'

如果你想在以后解密它: -

选择转换(varchar(max),     DecryptByCert(cert_id( 'PinNumber1'),PIN,N'3e @ K80 * ^'))   来自Atm  其中AID = 2

答案 2 :(得分:0)

从SQL Server 2012开始,有CERTENCODED(certid)函数:

SELECT
     *,
     CERTENCODED(C.certificate_id)
FROM sys.certificates C;

根据文档,您可以使用它来重新创建证书,因此它应该是ASN编码的证书(没有私钥)。从那以后,您应该能够找到将证书导入C#代码的方法。如果您只对某个证书感兴趣,也可以使用SELECT CERTENCODED(CERT_ID('myCert')), CERTPROPERTY(CERT_ID('myCert'), 'Expiry_Date')来获取所需的数据。

相关问题