我已将证书导入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列中是最佳选择。或者还有其他更好的方法来实现这个目标吗?
感谢您的帮助
答案 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')
来获取所需的数据。