通用Windows应用程序位于.appx文件中,它只是一堆文件和元数据的压缩文件。大多数元数据文件都在Microsoft网站上进行了大量记录,并且很容易解析和/或重新生成。然而,AppxSignature.p7x仍然是一个谜。
从此图表(source):
AppxSignature.p7x应该包含AppxBlockMap.xml,内容和版本的哈希值。目录哈希和签名。但是,我找不到AppxSignature.p7x文件本身的任何文档。理想情况下,我想使用替代工具来生成和验证此签名,例如openssl / gnutls或类似的。实际用途是在Linux上更新和重新打包应用程序,并为Windows应用商店准备.appxupload文件。
答案 0 :(得分:2)
如您链接到的博客文章中所述,AppxBlockMap.xml文件为包中的每个文件存储加密块哈希。使用authenticode签名包时,将使用数字签名验证并保护此文件。
因此,在Windows上,您有两个工具:
使用Windows API,您可以使用相同的MakeAppx Packaging API您可以使用The SignerSign function与SignTool进行相同的操作。
整个MakeAppx流程没有记录恕我直言,但实际上这里描述了块图模式:Package block map schema reference这个相对容易理解。
PE文档的Authenticode签名在此处记录:Windows Authenticode Portable Executable Signature Format
但它仅适用于PE(.dll,.exe等)文件(注意它也可以签署.CAB文件),我不认为SignerSign如何构建AppxSignature.p7x。但是,这里有一个开源工具:https://github.com/facebook/fb-util-for-appx。您将注意到此文件https://github.com/facebook/fb-util-for-appx/blob/master/PrivateHeaders/APPX/Sign.h,它声明了应该用作签名的输入。我不知道他们从哪里得到这些信息。
答案 1 :(得分:0)
这是PKCS#12(.pfx)文件,应加密并签名。关于PKCS 12,请参阅Wiki
创建.pfx的正确方法是使用WDK中的Pvk2Pfx.exe工具,请参阅How to create an app package signing certificate
使用Pvk2Pfx实用程序转换.pvk和.cer文件 MakeCert创建为.pfx文件,您可以使用SignTool进行签名 应用包:
Pvk2Pfx /pvk MyKey.pvk /pi pvkPassword /spc MyKey.cer /pfx MyKey.pfx [/po pfxPassword]