5

我已将证书导入 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 列中是最好的选择。还是有其他更好的方法来实现这一目标?

谢谢您的帮助

4

3 回答 3

1

您要查找的信息位于 syscerts 表中的 master 数据库中。但是,没有简单的方法可以获取这些数据。如果您尝试获取密钥,也许您并没有尝试将证书用于 SQL Server 打算使用证书的目的?

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

如果您提供有关您要完成的工作的更多信息,我可能会为您提供更多帮助。

这是 SQL Server 中证书的一个很好的概述:http ://www.mssqltips.com/sqlservertip/1319/sql-server-2005-encryption-certificates-overview/

于 2013-01-08T14:43:01.587 回答
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')来获取所需的数据。

于 2018-06-07T14:54:37.977 回答
-1

创建表 create table Atm ( AID int identity, PIN varchar(300) ) INSERT INTO Atm(PIN) VALUES (EncryptByCert(cert_id('PinNumber1'),'473429000000')) INSERT INTO Atm(PIN) VALUES (EncryptByCert(cert_id ('PinNumber1'),'473567000000')) 插入 Atm(PIN) 值 (EncryptByCert(cert_id('PinNumber1'),'4678904290000'))

之后创建一个证书如下: -

CREATE CERTIFICATE PinNumber1 ENCRYPTION BY PASSWORD ='3e@k80*^' WITH SUBJECT = 'This Pin number is Encrpted'

如果您想稍后解密它:-

从 AID=2 的 Atm 中选择 convert(varchar(max), DecryptByCert(cert_id('PinNumber1'),PIN,N'3e@k80*^'))

于 2015-03-06T05:55:55.427 回答