【发布时间】:2017-01-08 07:17:46
【问题描述】:
我最近从 DigiCert 购买了 EV 代码签名证书...
现在我在签署我的安装程序可执行文件时遇到问题。
目前(到现在)以下是制作安装程序的过程:
第 1 步:
我的安装程序是这样配置的,它会从它的子支持目录加载所有常用文件。
如下文件结构:
Setup.exe(它只有应用程序的exe文件和一些不时更改的配置文件)
支持(目录)
Support\DLL(具有我的应用程序所需的 DLL 文件)
Support\Others(任何其他文件)
支持\ETC(仅用于示例目的)
所有这些支持文件都驻留在我的服务器上,因为它们不会经常更改
所以,我创建了一个包装器 installer.exe 文件和一个脚本来处理包装器..
包装器 installer.exe 文件也驻留在我的服务器上
第 2 步:
我的脚本执行以下步骤:
a) 使用更新的应用程序文件制作 setup.exe。
b) 上传 setup.exe 文件到服务器
c) 在包装器 installer.exe 文件的末尾添加(附加)该 setup.exe 和所有其他所需文件
d) 我向我的客户/用户提供该包装器 installer.exe(单个文件)。
第三步:
当该包装器执行时,它会在临时目录中创建一个临时文件夹。提取所有本身附加的文件。并从该临时目录运行 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);
}
最好的问候
【问题讨论】:
-
您需要显示一些代码,说明您如何通过包装器附加和提取这些设置文件。您应该指向一个可公开访问的 wrapper.exe 版本。
-
签名嵌入在文件本身中。除非存在某些损坏或您的脚本附加了未签名的文件版本,否则它们不会丢失签名。
-
@selbie,先生,请检查我已添加示例/部分代码.. 最好的问候
-
您是否验证了您最初签名的 setup.exe 的哈希与您提取的 setup.exe 文件的哈希匹配?如果您没有 md5 或 sha 哈希工具可从命令行运行,请下载 fciv。
-
@selbie,先生,我不关心 setup.exe 文件,我关心 wrapper (installer.exe) 文件.. 因为这是用户将运行的文件..跨度>
标签: windows windows-installer digital-signature code-signing-certificate