如何从 SQL Server 获取证书公钥?
Posted
技术标签:
【中文标题】如何从 SQL Server 获取证书公钥?【英文标题】:How can I get certificate public key from SQL Server? 【发布时间】:2012-12-22 08:55:13 【问题描述】:我已将证书导入 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 列中是最好的选择。还是有其他更好的方法来实现这一点?
感谢您的帮助
【问题讨论】:
mssqltips.com/sqlservertip/2388/… 【参考方案1】:您要查找的信息位于 syscerts 表中的 master 数据库中。但是,没有简单的方法可以获取这些数据。如果您尝试获取密钥,也许您并没有尝试将证书用于 SQL Server 打算使用证书的目的?
如果您尝试将证书存储在 SQL Server 中,但不将它们用于 SQL Server 的安全性,那么您可能希望尝试将它们存储在表的 varbinary 列中。这样的东西对你有用吗?
如果你能提供更多关于你想要完成的事情的信息,我可能会为你提供更多帮助。
下面是 SQL Server 中证书的一个很好的概述:http://www.mssqltips.com/sqlservertip/1319/sql-server-2005-encryption-certificates-overview/
【讨论】:
感谢您的回答。我已经编辑了问题并添加了更多详细信息。【参考方案2】:创建一个表 创建表 Atm ( AID int 身份, PIN varchar(300) ) 插入自动取款机(PIN) 值(EncryptByCert(cert_id('PinNumber1'),'473429000000')) 插入自动取款机(PIN) 值(EncryptByCert(cert_id('PinNumber1'),'473567000000')) 插入自动取款机(PIN) 值(EncryptByCert(cert_id('PinNumber1'),'4678904290000'))
然后创建一个证书如下:-
创建证书 PinNumber1 密码加密 ='3e@k80*^' WITH SUBJECT = '此 Pin 号已加密'
如果你想稍后解密它:-
选择转换(varchar(最大值), DecryptByCert(cert_id('PinNumber1'),PIN,N'3e@k80*^')) 从自动取款机 其中 AID=2
【讨论】:
【参考方案3】:从 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')
来获取所需的数据。
【讨论】:
以上是关于如何从 SQL Server 获取证书公钥?的主要内容,如果未能解决你的问题,请参考以下文章