使用外部CA签署Powershell脚本



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

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

  1. 从VeriSign购买代码签名证书
  2. 在我的计算机上安装证书
  3. 对PowerShell脚本进行签名
  4. 在所需设备上执行脚本

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

这应该有效。虽然我从来没有试过,但你的逻辑是有道理的。

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

  1. 是的,你可以做到——甲骨文做到了

  2. Verisign确实发布代码签名证书,但它们是用中间CA签名的。这意味着Windows必须以某种方式获得该证书。Verisign中间证书确实有"授权信息访问"字段是Windows检索中间证书的一种方法。但是这台机器必须能够接入互联网。

    • 另一种选择(如果无法访问互联网)是在用户的机器上安装中间证书。可能是安装程序的一部分。我想这一定是甲骨文在我的机器上所做的

    • 对于Authenticode EXE,另一种选择(如果计算机无法访问互联网)是为了确保中间证书嵌入EXE中的authenticode签名。但是我不知道Powershell会支持这一点。

作为另一项确认,您可以致电/发送电子邮件给威瑞信,以验证他们的支持。

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

最新更新