源代码管理后未签名的已签名电源外壳脚本



我正在尝试设置一些PowerShell构建脚本。我有一个自签名证书,可用于对脚本进行签名并使其与AllSigned一起运行。问题是,这不会跨越我们的 scm(git)。

每当我尝试克隆和运行脚本,或者更改它并还原时,我都会收到文件未签名的错误。

无法加载文件<>。文件<>未进行数字签名。脚本不会在系统上执行。...

如果我对脚本重新签名,签名块会发生变化,我可以再次运行它。

有什么方法可以保留签名吗?

今天早上再深入研究一下:

除了附加到实际文件的签名块外,还有存储为文件的扩展属性的签名信息。

正如预期的那样,git 不会跟踪 ea。对于权限等属性,标准建议是使用 git 钩子。我一直无法找到任何方法来设置数字签名的属性,而无需重新签名文件。

这剩下 3 个选项:

  • 将生成服务器和需要运行脚本的任何其他计算机切换到RemoteSigned
  • 每次删除属性时,使用一些 shell voodoo、git hooks 和 SignTool 对文件重新签名。脆弱而笨拙。
  • 重新设计生成/部署过程,以便不需要 Powershell 脚本。我处于早期阶段,所以这是我最好的选择。

与源代码管理相关的内容正在修改脚本。例如,如果您使用的是 Subversion,则通过 svn:keywords 扩展 $Id$URL$ 等关键字将导致脚本随每次修订而更改。另一种可能性是修改 EOL 标记或文件编码(UTF-8 与 ASCII)。

最新更新