Insignia 添加的数字签名与 PatchCertificates 冲突?
digital signatures added by Insignia conflicting with PatchCertificates?
我正在 WiX 上下文中探索 数字签名 的功能(windows 安装程序 MSI 和 windows 补丁 MSP).
在我的例子中,我正在生成一个带有非嵌入式 "Data1.cab".
的 MSI
据我所知,重要的是:
- 签署任何外部出租车
- 使用这些出租车的数字签名在 MSI 上签名
- 签署 MSI 本身
我正在关注官方 WiX insignia documentation 以便在 visual studio 2015 年使用:
所以在 *.wixproj 文件中我添加了以下部分。
为简洁起见,省略了 signtool.exe 的其他命令行参数。
<Import Project="$(WixTargetsPath)" />
<PropertyGroup>
<SignOutput>true</SignOutput>
</PropertyGroup>
<Target Name="SignMsi">
<Exec Command="signtool.exe sign /a "%(SignMsi.FullPath)"" />
</Target>
<Target Name="SignCabs">
<Exec Command="signtool.exe sign /a "%(SignCabs.FullPath)"" />
</Target>
到目前为止一切顺利。
但我 也 需要 PatchCertificates
为将来 UAC patches.
所以在我的 *.wxs 源文件中我有:
<Product ... >
<Package ... />
<Media Id="1" Cabinet="Data1.cab" EmbedCab="no"/>
<PatchCertificates>
<DigitalCertificate SourceFile="$(env.MY_CERTIFICATE_DIRECTORY)/cert256.pem" Id="patchcert"/>
</PatchCertificates>
</product>
当我现在在 visual studio 中编译项目时,我总是得到以下错误:
C:\Program Files (x86)\WiX Toolset v3.10\bin\insignia.exe -im C:\src\Test\setup\obj\Release\bin\MyProduct.msi -out C:\src\Test\setup\obj\Release\bin\MyProduct.msi
Insignia.exe(0,0): error INSG0001: Cannot find the requested object.
Done building project "MyInstaller.wixproj" -- FAILED.
--
观察:
- 这两个功能本身都运行良好
- 但是如果我将两者结合起来编译就会失败
他们互相不兼容吗?
--
其他关键字:
- WiX 属性:DigitalCertificate、PatchCertificates、DigitalSignature
- MSI 表:MsiDigitalCertificate、MsiPatchCertificate、MsiDigitalSignature
- 一般条款:数字证书、数字签名、WiX、徽章、献祭、public 钥匙
--
更新:
可能是因为这个错误(参见 sourceforge, see github)(2013 年报告)?
我找到了解决方案。
我以 PEM
格式包含证书:
<PatchCertificates>
<DigitalCertificate SourceFile="$(env.MY_CERTIFICATE_DIRECTORY)/cert256.pem" Id="patchcert"/>
</PatchCertificates>
但我们必须使用DER
格式的证书:
<PatchCertificates>
<DigitalCertificate SourceFile="$(env.MY_CERTIFICATE_DIRECTORY)/cert256_DER.cer" Id="patchcert"/>
</PatchCertificates>
另请参阅此相关问题:DigitalCertificate (for UAC patches) - format specification?
PS:
由于特定的错误消息根本没有帮助,我只是假设一些 bug 或 incompatibility 走错了路。
而且奇怪的是,错误仅在结合这两个功能时显示。
我正在 WiX 上下文中探索 数字签名 的功能(windows 安装程序 MSI 和 windows 补丁 MSP).
在我的例子中,我正在生成一个带有非嵌入式 "Data1.cab".
据我所知,重要的是:
- 签署任何外部出租车
- 使用这些出租车的数字签名在 MSI 上签名
- 签署 MSI 本身
我正在关注官方 WiX insignia documentation 以便在 visual studio 2015 年使用:
所以在 *.wixproj 文件中我添加了以下部分。
为简洁起见,省略了 signtool.exe 的其他命令行参数。
<Import Project="$(WixTargetsPath)" />
<PropertyGroup>
<SignOutput>true</SignOutput>
</PropertyGroup>
<Target Name="SignMsi">
<Exec Command="signtool.exe sign /a "%(SignMsi.FullPath)"" />
</Target>
<Target Name="SignCabs">
<Exec Command="signtool.exe sign /a "%(SignCabs.FullPath)"" />
</Target>
到目前为止一切顺利。
但我 也 需要 PatchCertificates
为将来 UAC patches.
所以在我的 *.wxs 源文件中我有:
<Product ... >
<Package ... />
<Media Id="1" Cabinet="Data1.cab" EmbedCab="no"/>
<PatchCertificates>
<DigitalCertificate SourceFile="$(env.MY_CERTIFICATE_DIRECTORY)/cert256.pem" Id="patchcert"/>
</PatchCertificates>
</product>
当我现在在 visual studio 中编译项目时,我总是得到以下错误:
C:\Program Files (x86)\WiX Toolset v3.10\bin\insignia.exe -im C:\src\Test\setup\obj\Release\bin\MyProduct.msi -out C:\src\Test\setup\obj\Release\bin\MyProduct.msi
Insignia.exe(0,0): error INSG0001: Cannot find the requested object.
Done building project "MyInstaller.wixproj" -- FAILED.
--
观察:
- 这两个功能本身都运行良好
- 但是如果我将两者结合起来编译就会失败
他们互相不兼容吗?
--
其他关键字:
- WiX 属性:DigitalCertificate、PatchCertificates、DigitalSignature
- MSI 表:MsiDigitalCertificate、MsiPatchCertificate、MsiDigitalSignature
- 一般条款:数字证书、数字签名、WiX、徽章、献祭、public 钥匙
--
更新:
可能是因为这个错误(参见 sourceforge, see github)(2013 年报告)?
我找到了解决方案。
我以 PEM
格式包含证书:
<PatchCertificates>
<DigitalCertificate SourceFile="$(env.MY_CERTIFICATE_DIRECTORY)/cert256.pem" Id="patchcert"/>
</PatchCertificates>
但我们必须使用DER
格式的证书:
<PatchCertificates>
<DigitalCertificate SourceFile="$(env.MY_CERTIFICATE_DIRECTORY)/cert256_DER.cer" Id="patchcert"/>
</PatchCertificates>
另请参阅此相关问题:DigitalCertificate (for UAC patches) - format specification?
PS:
由于特定的错误消息根本没有帮助,我只是假设一些 bug 或 incompatibility 走错了路。
而且奇怪的是,错误仅在结合这两个功能时显示。