【问题标题】:Sign PowerShell script from C#从 C# 签署 PowerShell 脚本
【发布时间】:2020-08-14 15:16:21
【问题描述】:

我希望创建一个 Web 服务来签署 Powershell 脚本,以便在 Intranet 中使用。是否可以在 set-authenticodesignature 创建的脚本末尾复制编码文本块?

MSDN documentation 似乎拒绝了。

【问题讨论】:

    标签: c# powershell code-signing


    【解决方案1】:

    .NET 不是你的朋友。没有我能找到的支持 - 我已经搜索了很多次

    1. 这是一个使用 Win32 API 的 VB 示例。可以适应Powershell。 http://blogs.msdn.com/b/alejacma/archive/2008/02/20/how-to-sign-exe-files-with-an-authenticode-certificate-vb-net.aspx

    2. 博客提到了 CAPICOM.SignedCode。如果您已经安装了 CAPICOM 或者这是一个选项,我会选择它。我个人更喜欢在 PS 中使用 COM 而不是 Win32。

    3. 怀疑您不想这样做,但 FWIW,Mono 确实支持内置的 Authenticode 签名。不久前,我能够剪切、粘贴和编辑一大块 Mono C# 代码,然后让它在 Powershell 上运行。

    【讨论】:

    • 如果您确实想这样做,我有以下技巧 - gist.github.com/voltagex/5835833
    • @voltagex 不错的技巧。你的行为让我看到了反射器,我在 System.Security.Cryptography 中看到了 CAPI、CAPIBase、CAPIMethods 和 CAPINative 类。当然都是私有的,但可以通过反射获得
    • 我希望你回来,因为我的 GitHub 存储库中的 SignCode 工具要好得多,并且使用与 powershell 相同的 API。
    【解决方案2】:

    但是你可以调用powershell from c#。使用此功能,您可以轻松调用 从您的代码中设置 AuthenticodeSignature

    【讨论】:

    • 谢谢,这是可能的。我很想知道托管 API 是否可以做到 - 让我将 PowerShell 脚本签名为 MemoryStream
    【解决方案3】:

    这是,他们是如何做到的https://github.com/PowerShell/PowerShell/blob/d8f8f0a8bcbadb357f9eaafbb797278ebe07d7cc/src/System.Management.Automation/security/Authenticode.cs

    在此文件中,您可以找到具有以下功能的 signaturehelper 类:

    internal static Signature SignFile(SigningOption option,
                                               string fileName,
                                               X509Certificate2 certificate,
                                               string timeStampServerUrl,
                                               string hashAlgorithm)
    

    好吧,我现在有点晚了;-)

    最好的问候

    【讨论】:

      猜你喜欢
      • 2011-04-06
      • 1970-01-01
      • 2020-12-04
      • 2011-01-20
      • 1970-01-01
      • 2019-09-30
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多