EV代码签名有问题

时间:2017-01-08 07:17:47

标签: windows windows-installer digital-signature code-signing-certificate

我最近从DigiCert购买了EV Code签名证书......

现在我遇到了签署安装程序可执行文件的问题。

目前(直到现在)下面是制作安装程序的过程:

步骤1:

我的安装程序以某种方式进行配置,它将从其子支持目录中加载所有常用文件。

如下文件结构:

Setup.exe(它只有应用程序exe文件和其他一些不时更改的配置文件)

支持(目录)

支持\ DLL(具有我的应用程序所需的DLL文件)

支持\其他(任何其他文件)

支持\ ETC(仅供参考)

所有这些支持文件都驻留在我的服务器上,因为它们不会经常更改

所以,我已经创建了一个wrapper installer.exe文件和一个处理包装器的脚本..

该wrapper installer.exe文件也驻留在我的服务器上

步骤-2:

我的脚本执行以下步骤:

a)使用更新的应用程序文件制作setup.exe。

b)将setup.exe文件上传到服务器

c)在wrapper installer.exe文件末尾添加(附加)setup.exe和所有其他必需文件

d)我将包装程序installer.exe(单个文件)提供给我的客户/用户。

步骤-3:

当该包装器执行时,它会在临时目录中创建一个临时文件夹。提取自身附加的所有文件。并从该临时目录运行setup.exe

我进行此过程,因为我只需要更改仅几千字节的应用程序文件(始终低于1mb),但这些支持文件的大小非常大。

因此,不必每次都从本地计算机上传所有这些文件。

我使这个包装器进程更快地进行更新/上传过程。

现在,问题:

如果我签署了wrapper.exe文件并将其放入服务器,但是当我的脚本将数据附加到该文件时,它会丢失证书设置(它不再签名:()

所以,我怎样才能克服这种情况..

更新-1:

如上所述,下面是用于附加setup.exe文件的php代码:

    //Appending Setup.exe file...
    $archive_File = 'files/' . $strFileID . '.exe';
    if (is_file($archive_File) == 1)
    {
        $strSize = filesize($archive_File);
        $strData = 'Setup.exe' . chr(0) . $strSize . chr(0) . file_get_contents($archive_File) ;
        file_put_contents($strArchiveFile, $strData, FILE_APPEND | LOCK_EX);
    }
    else
    {
        exit ('following file does not exits: ' . $archive_File);
    }

最好的问候

1 个答案:

答案 0 :(得分:2)

您在代码签名后无法修改wrapper.exe。这就是代码签名的全部要点 - 验证签名的可执行文件上没有发生病毒或其他篡改。

我不确定你为什么要首先对wrapper.exe进行代码签名,然后再将文件附加到它上面。您需要执行以下步骤:

  1. 代码签名setup.exe和所有其他二进制文件首先除了wrapper.exe

  2. 将setup.exe和所有其他文件附加到wrapper.exe。

  3. 然后在完全构建后对代码签名wrapper.exe。

  4. 有很多免费工具可以生成自解压存档,运行时会提示用户在其中运行setup.exe。 7Zip will do this for free.

    但听起来你需要在下载之前按需构建你的wrapper.exe。如果是这种情况,请将代码签名脚本添加到构建最终wrapper.exe的服务器代码中