使用现有根证书颁发机构签署证书

时间:2018-04-27 22:55:47

标签: powershell ssl certificate

我正在尝试为SQL Server Reporting Services的不同主机名(别名)设置一些证书,以便我可以在我自己的计算机上保护连接以进行测试。我的理解是这些证书需要由受信任的根证书颁发机构签名(解释here)。在做了一些研究之后,我发现了许多有用的信息,通常可以通过this post进行总结;我发现的信息告诉我如何使用Powershells New-SelfSignedCertificate cmdlet创建新证书。

所以现在我知道如何创建新的根CA,并且我知道如何为由新的根CA签名的给定主机名创建SSL证书。但是,我无法找到解释如何重用现有根CA的任何地方。我希望代码能够像这样工作:

$rootCA = <# What goes here? #>
$TestSigned = New-SelfSignedCertificate -subjectName "CN=TestSignedByRoot" -Signer $rootCA

我是否应该在每次创建证书时创建一个新的根CA?这看起来很疯狂所以我当然希望不是这样。如果您有任何人可以提供一些解释和示例代码,我们将不胜感激。

3 个答案:

答案 0 :(得分:0)

你在这里错过了一个关键词:值得信赖。不只是由您,而是由任何试图验证证书有效性的计算机。大多数公司都有一个PKI解决方案,可以在内部颁发证书,并将通过GPO推出的Root CA证书放入本地机器证书存储的Trusted Roots文件夹中。根CA应该是已经建立的,并且将被连接到SQL服务器的计算机信任。我建议您联系您的IT部门或安全部门,询问该公司是否有受信任的根CA,您可以将证书签名,或者他们是否可以向您颁发链接到受信任根的证书。

编辑:好的,我错过了这一点。我的理解是我的机器&#39;是您支持的SQL服务器与将连接到它的其他计算机。如果您唯一关心的计算机是您自己的,那么这归结为:

  1. 创建证书签名证书(证书A)
  2. 将证书A添加到LocalMachine的“受信任的根”文件夹中 证书商店
  3. 创建自签名证书(证书B) 使用证书A作为签名证书
  4. 完成步骤1&amp; 2您可以根据需要多次重复步骤3以制作其他证书。您应该只需要1个根证书。重要的一点是,根证书受到客户端的信任,因此当它连接到SQL报告服务并看到证书时,它可以建立对发起链的根证书的信任链。

答案 1 :(得分:0)

从证书存储中获取证书太容易了:

$rootCa = ( Get-ChildItem -Path cert:\LocalMachine\My\EEDEF61D4FF6EDBAAD538BB08CCAADDC3EE28FF )

要查看“我的商店”中有哪些证书,请执行以下操作:

Get-ChildItem -Path cert:\LocalMachine\My

要通过主题名称获取证书,只需使用Where-Object并检查主题:

$rootCa = Get-ChildItem -Path cert:\LocalMachine\My | Where-Object {$_.Subject -eq "CN=My Awesome Root CA"}

答案 2 :(得分:0)

要使用现有的受信任证书,您将需要在我使用CertMgr的“个人证书”文件夹(cert:\ LocalMachine \ My)中获得受信任证书的副本。否则,当您最终运行命令以创建自签名证书时,会收到错误消息

New-SelfSignedCertificate:CertEnroll :: CSignerCertificate :: Initialize:无法找到对象或属性。 0x80092004(-2146885628 CRYPT_E_NOT_FOUND)