2

我已经阅读了这篇关于使用证书签署 PowerShell 脚本的文章。这更多是关于使用来自 VeriSign(或类似)的外部证书来编码和保护我在 PowerShell 脚本中开发的代码。

我只是想知道这是否真的有效。我希望这个过程如下:

  1. 从 VeriSign 购买代码签名证书
  2. 在我的电脑上安装证书
  3. 签署 PowerShell 脚本
  4. 在所需设备上执行脚本

由于此脚本将使用外部 CA 进行签名,Windows 无法对证书进行身份验证,因为 Windows 信任 VeriSign 根 CA?我的猜测是因为 Windows 已经拥有 VeriSign 的根 CA 并信任它,如果我发生在不允许 Internet 访问的系统上,证书仍将被验证并允许我运行它?

4

3 回答 3

1

那应该行得通。不过,我从未尝试过,但您的逻辑是有道理的。

于 2013-07-02T20:29:55.277 回答
1

我查看了我的 Win7 机器上的证书存储,它有一个由“Verisign Class 3 Code Signing 2010 CA”颁发的 Oracle 代码签名证书。该 CA 是一个中间 CA。根 CA 是“Verisign Class 3 Public Primary Certification AUthority - G5”。该根 CA 位于 Windows 受信任的根 CA 存储中。所以我从中收集到的是:

  1. 是的,您可以做到 - Oracle 做到了

  2. Verisign 确实会颁发代码签名证书,但它们是使用中间 CA 进行签名的。这意味着 Windows 必须以某种方式获得此证书。Verisign 中间证书确实具有“授权信息访问”字段,这是 Windows 可以检索中间证书的一种方式。但是机器必须能够访问互联网。

    • 另一种方法(如果无法访问 Internet)是在用户的计算机上安装中间证书。可能是安装程序的一部分。我认为这一定是甲骨文在我的机器上所做的

    • 对于 Authenticode EXE,另一种选择(如果机器无法访问 Internet)是确保中间证书嵌入在 EXE 的身份验证签名中。但是我不知道 Powershell 是否会支持这一点。

作为另一个确认,您可以致电/发送电子邮件 Verisign 以验证他们的支持。

于 2013-07-03T03:16:23.923 回答
0

在所需设备上执行脚本仍然需要您在该设备上将执行策略设置为至少 AllSigned。如果您想信任此发布者,您仍然会遇到问题,除非您将证书添加到设备或域。见这里

于 2013-07-03T17:26:45.353 回答