【问题标题】:How can I get certificate public key from SQL Server?如何从 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 列中是最好的选择。还是有其他更好的方法来实现这一点?

感谢您的帮助

【问题讨论】:

标签: sql-server database certificate key public


【解决方案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') 来获取所需的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 2011-03-24
      • 2016-01-07
      相关资源
      最近更新 更多