跟进证书共享问题

Cra*_*ein 2 sql-server-2005 sql-server

跟进帖子在数据库和实例之间共享由密码加密的证书

我创建了一个带密码的证书

CREATE CERTIFICATE testcert
ENCRYPTION BY PASSWORD = 'test123' 
WITH SUBJECT = 'Certificate for stored procedures using dynamic SQL',
START_DATE = '2010-01-01',
EXPIRY_DATE = '2100-01-01'
Run Code Online (Sandbox Code Playgroud)

然后我删除了私钥

ALTER CERTIFICATE testcert REMOVE PRIVATE KEY 
Run Code Online (Sandbox Code Playgroud)

最后,我尝试备份证书

BACKUP CERTIFICATE testcert TO FILE = 'd:\mssql\testcert.cer' 
WITH PRIVATE KEY ( DECRYPTION BY PASSWORD = 'S3creT!' ,
FILE = 'd:\mssql\testcert.pvk' , 
ENCRYPTION BY PASSWORD = 'test123' );
Run Code Online (Sandbox Code Playgroud)

我得到这个错误:

消息 15246,级别 16,状态 1,第 1 行无法转储证书“testcert”的私钥,因为找不到私钥。

自从我删除私钥以来,这似乎很正常。

第一个问题:使用上一篇文章中解释的方法,这是否意味着要备份证书我会使用这个语句?

BACKUP CERTIFICATE testcert TO FILE = 'd:\mssql\testcert.cer' 
Run Code Online (Sandbox Code Playgroud)

第二个问题:您将如何将证书恢复到另一台服务器和数据库?

例子 :

CREATE CERTIFICATE testcert2       
ENCRYPTION BY PASSWORD = 'test123',
FROM FILE = 'd:\mssql\testcert.cer'     
WITH PRIVATE KEY ....
Run Code Online (Sandbox Code Playgroud)

谢谢。

Rem*_*anu 7

当您为了移动证书备份和恢复证书时您不应该包含任何与私钥相关的条款。我在链接的帖子中解释了为什么私钥的价值主要来自它的唯一性,任何复制私钥的操作都会稀释其价值:

  • 它不能再用作身份证明(即签名),因为世界各地存在多个副本并且不可否认性被破坏
  • 它不能用作实现隐私的安全手段(即使用相应的公钥加密),因为由于存在多个副本,因此副本可能已被泄露

简单说一下,证书是一种“使用数字签名将公钥与身份绑定的电子文档”,正确的术语是公钥证书。换句话说,证书没有私钥。我自己很小心地说“证书和相关的私钥”。

备份和恢复证书和相关私钥可接受的少数操作是密钥托管 和用于恢复目的的备份(不是用于移动)。

现在,在这篇长篇论文之后,答案是:

  1. 是的,使用 BACKUP CERTIFICATE testcert TO FILE = 'd:\mssql\testcert.cer'
  2. CREATE CERTIFICATE testcert2 FROM FILE = 'd:\mssql\testcert.cer'