【问题标题】:Signing a Windows EXE file签署 Windows EXE 文件
【发布时间】:2010-09-20 02:46:00
【问题描述】:

我有一个要签名的EXE 文件,这样Windows 就不会就来自“未知发布者”的应用程序向最终用户发出警告。我不是 Windows 开发人员。有问题的应用程序是从生成屏幕保护程序应用程序的应用程序生成的屏幕保护程序。因此,我无法影响文件的生成方式。

我已经发现我需要来自CAcode signing 证书,例如Verisign 或instantssl.com。我不明白的是我需要做什么(如果可能的话)来签署我的 EXE 文件。什么是简单的解释?

Mel Green 的回答让我走得更远,但 signtool 希望我指定在任何情况下都使用什么证书。我能否以某种方式获得免费的代码签名证书来测试这是否对我有用?

另外请指定哪种证书类型是正确的。大多数网站只提到“代码签名”,并谈论对用户实际编译的应用程序进行签名。对我来说不是这样。

【问题讨论】:

标签: windows certificate exe sign


【解决方案1】:

您可以尝试使用Microsoft's Sign Tool

您可以将其作为适用于 Windows Server 2008 和 .NET 3.5 的 Windows SDK 的一部分下载。下载后,您可以像这样从命令行使用它:

signtool sign /a MyFile.exe

这会使用可用的“最佳证书”对单个可执行文件进行签名。 (如果您没有证书,则会显示 SignTool 错误消息。)

或者你可以试试:

signtool 登录向导

这将启动一个向导,引导您完成对应用程序的签名。 (此选项在 Windows SDK 7.0 之后不可用。)


如果您想获得可用于测试签署可执行文件过程的证书,您可以使用 .NET 工具 Makecert

Certificate Creation Tool (Makecert.exe)

创建自己的证书并使用它签署可执行文件后,您需要手动将其添加为计算机的受信任根 CA,以便 UAC 告诉运行它的用户它是来自可信赖的来源。 重要Installing a certificate as ROOT CA will endanger your users privacy. Look what happened with DELL. 您可以在以下位置找到更多信息以通过代码和 Windows 来完成此操作:

希望能为任何尝试这样做的人提供更多信息!

【讨论】:

【解决方案2】:

我在工作中遇到了同样的情况,这是我们的发现

您要做的第一件事是获取证书并将其安装到您的计算机上,您可以从证书颁发机构购买一个或使用 生成一个>makecert

以下是 2 个选项的优缺点

购买证书

使用 Makecert 生成证书

  • 优点:
    • 步骤很简单,您可以与最终用户共享证书
  • 缺点:
    • 最终用户必须在他们的机器上手动安装证书,具体取决于您的客户端,这可能不是一个选项
    • 使用 makecert 生成的证书通常用于开发和测试,而不是生产

签署可执行文件

有两种方法可以对你想要的文件进行签名:

  • 使用安装在计算机上的证书

    signtool.exe sign /a /s MY /sha1 sha1_thumbprint_value /t http://timestamp.verisign.com/scripts/timstamp.dll /v "C:\filename.dll"

    • 在此示例中,我们使用存储在 Personal 文件夹中的证书和 SHA1 指纹(此指纹来自证书)对位于 C:\filename.dll 的文件进行签名
  • 使用证书文件

    signtool sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /f "c:\path\to\mycert.pfx" /p pfxpassword "c:\path\to\file.exe"

    • 在本例中,我们使用证书c:\path\to\mycert.pfx 和密码pfxpassword 对文件c:\path\to\file.exe 进行签名

测试您的签名

  • 方法一:使用signtool

    转到:开始 > 运行
    输入CMD > 点击确定
    在命令提示符下输入signtool所在的目录
    运行以下命令:

    signtool.exe verify /pa /v "C:\filename.dll"

  • 方法2:使用Windows

    右键单击已签名的文件
    选择属性
    选择数字签名标签。签名将显示在签名列表部分。

希望对你有帮助

来源:

【讨论】:

    【解决方案3】:

    如果您正在进行开源开发,您可以获得免费便宜的代码签名证书from Certum

    我已经使用他们的证书一年多了,它确实摆脱了来自 Windows 的未知发布者消息。

    就签名代码而言,我使用这样的脚本中的signtool.exe

    signtool.exe sign /t http://timestamp.verisign.com/scripts/timstamp.dll /f "MyCert.pfx" /p MyPassword /d SignedFile.exe SignedFile.exe
    

    【讨论】:

    • 它看起来不再免费,仍然便宜得多,14 欧元
    • 你说得对,它看起来不再免费了。 fwiw我刚刚更新,我没有支付任何费用。也许我是祖父。也许他们的内部流程被打破了。他们的网站肯定很复杂。
    • Certum 商店说他们的开源证书不会删除 Microsoft SmartScreen 过滤器消息。
    • @MarkusLaire 你可以bypass SmartScreen by buying the expensive EV certificate。否则,您的 EXE(和您的证书)需要在 SmartScreen 停止标记它之前建立“声誉”。获得足够多的用户(以及apparently internal users are fine)就可以完成这项工作,但有多少用户以及持续多长时间似乎是不可预测的。
    【解决方案4】:

    如果您需要在 Linux 机器上签署可执行文件,另一种选择是使用 Mono project tools 中的 signcode。是supported on Ubuntu

    【讨论】:

    • 这很有帮助!该软件包在 Debian 中也可用,名称为 mono-devel
    【解决方案5】:

    ASP 的杂志 ASPects 有关于如何签署代码的详细说明(您必须成为会员才能阅读文章)。可以通过http://www.asp-shareware.org/下载

    这里有一个描述链接,你可以make your own test certificate

    This 也可能很有趣。

    【讨论】:

    • 四年后的附录:Comodo 在 2012 年初的某个时间遭到入侵 (blogs.comodo.com/it-security/data-security/…),因此许多用户代理现在拒绝具有 Comodo 根权限的证书
    • Comodo 在 2013 年中期仍然是一个冒险的赌注吗?“用户代理”是否意味着 Microsoft/Windows 肯定是他们决定是否显示臭名昭著的“未知发布者”消息.
    • 抱歉,删除了明确的服务建议,即 1) 过时和 2) 现在已被排除在主题之外(因为 1.)。
    【解决方案6】:

    参考https://steward-fu.github.io/website/driver/wdm/self_sign.htm 注意:来自 Microsoft SDK 的 signtool.exe

    1.第一次(制作私人证书)

    Makecert -r -pe -ss YourName YourName.cer

    certmgr.exe -add YourName.cer -s -r localMachine root

    2.After(将您的标志添加到您的应用)

    signtool sign /s YourName YourApp.exe

    【讨论】:

      【解决方案7】:

      这不是问题的直接答案,但它密切相关(我希望它很有用),因为迟早任何个人程序员都会把手伸进钱包。

      因此,EV(扩展验证)代码签名证书的价格,按价格排序:

      AboutSSL
      240 美元/年(点击诱饵价格)
      $287/年(实际价格,优惠券后)

      KSoftware.net
      1 年 $350 +($50 隐藏费用!)
      2 年 $600
      3 年 $750
      (OV:每年 84 美元)
      我从他们那里购买。 eToken 是通过 U 盘发送的。无需阅读器。他们只是中介。最后,您实际上是从 Comodo (Sectigo) 购买的。 他们非常慢(可能是因为中间人)!

      Sklep.certum.pl
      1 年 379 欧元
      (似乎仅适用于波兰用户)

      LeaderSsl.de
      1 年 364 欧元或 307 欧元(+19%增值税)
      (OV 69+增值税)

      Sectigo.com
      1 年 $499 美元
      3 年 897 美元

      GlobalSign.com
      1 年总计 410 美元
      2 年总计 760 美元
      3 年总计 $950

      Digicert.com
      1 年:600 美元(当时是 104 美元)
      3 年:?

      symantec.com
      1 年:700 美元
      3年:贵得离谱

      更多价格在这里:
      cheapsslsecurity.com CodeSigning EV
      cheapsslsecurity.com SSL only!


      EV 与 OV

      使用 EV,需要九个额外步骤,包括验证企业的公共电话号码、营业时间、注册号和管辖权,以及域名欺诈检查、联系人黑名单检查和电话验证就业请求者的状态。

      Some 建议将使用 OV 签名的程序提交给 Microsoft 以使用他们的防病毒软件进行检查。


      如果您发现更便宜的价格,请告诉我,我会更新列表!

      【讨论】:

      【解决方案8】:

      还有另一种选择,如果您在 Windows 10 上进行开发但没有安装 Microsoft 的 signtool.exe,您可以在 Windows 上使用 Bash on Ubuntu 为您的应用程序签名。这是一个破败:

      https://blog.synapp.nz/2017/06/16/code-signing-a-windows-application-on-linux-on-windows/

      【讨论】:

      • osslsigncode 也可以在cygwin 下使用,因此如果您已经在使用它(就像我一样),那么您可以登录当前环境,而无需切换到 WSL。
      【解决方案9】:

      使用以下链接对 .exe(安装程序/安装程序)文件进行签名(在不使用 Microsoft 安装程序签名工具的情况下对 exe/安装程序文件进行签名)

      https://ebourg.github.io/jsign/#files

      示例命令 java -jar jsign-2.0.jar --keystore keystore.jks" --alias alias --storepass password MyInstaller.exe

      为我工作:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-12
        • 1970-01-01
        • 2017-12-04
        相关资源
        最近更新 更多