MSIX 永久性标识

此功能使你能够使用新证书对包进行签名,同时仍保持应用的更新体验。 换句话说,此功能允许包在平台中保留其旧包标识,而无需使用旧(原始)证书进行签名。 从 Windows Insider Preview 内部版本 22000 开始,需要创建一个项目来显示用于签名的旧证书与新证书之间的关系。 下面是有关如何保留包标识以保持更新体验的分步说明。

要求

  • 通过 Windows SDK 获取 MakeAppx.exe。 此功能目前在 Windows SDK Preview 22000 中提供
  • 通过 Windows SDK 获取 SignTool.exe。 此功能目前在 Windows SDK Preview 22000 中提供
  • 用于对原始包进行签名的旧证书 (CN=Old)
  • 用于对包进行签名的新证书 (CN=New)

演练

这是有关如何在保留包标识的同时使用新证书对包进行签名的分步说明。

创建项目

  1. 编写详细说明新旧发布者的 XML 项目。 将其随意命名,如 artifact.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Publisher xmlns="http://schemas.microsoft.com/appx/publisherbridging/2021" Old="CN=Old" New="CN=New" />
  1. 编写目录定义文件 (CDF) 以创建将用于对项目进行签名的目录。 将其随意命名,如 artifact.cdf:
[CatalogHeader]
Name=artifact.cat
CatalogVersion=2
HashAlgorithms=SHA256

[CatalogFiles]
<HASH>artifact.xml=artifact.xml
  1. 在此 CDF 上运行 makecat.exe。 它将创建在其中指定的文件
makecat.exe artifact.cdf
  1. 使用旧证书对目录进行签名
signtool.exe sign /f old-cert.pfx /fd SHA256 artifact.cat

此时,只需保留在此之后的 XML 和 CAT 文件。 可以创建多个项目,但平台当前最多支持 5 个项目。

注意

建议对目录文件加时间戳。 如果目录未加时间戳,则旧证书过期后该项目将失去作用。

创建包

  1. 创建发布者桥接文件,告知 makeappx.exe 要使用哪些项目。 此文件类似于映射文件。 将其随意命名,如 artifacts.txt
[PublisherBridging]
"artifact.xml" "artifact.cat"

每行必须包含一对 XML 和 CAT 文件路径。 这些项目在应用时必须进行排序。 如果有两个项目,一个用于转到 Publisher1->Publisher2,而另一个用于 Publisher2->Publisher3,则必须首先列出用于 Publisher1->Publisher2 的项目

  1. 使用 /pb 标志调用 makeappx.exe 以指向发布者桥接文件:
makeappx.exe pack /p app.msix /d .\app\ /pb artifacts.txt
  1. 使用新证书对包进行签名
signtool.exe sign /f new-cert.pfx /fd SHA256 app.msix

现在,你有了一个包,其中包含存储的项目,并已使用新证书进行签名。 你可以像部署任何其他 MSIX 包一样部署这个包。

注意事项

  • 建议应为目录加时间戳。 为此,需要在调用 signtool 时在目录路径之前添加以下参数:/td SHA256 /tr

  • 你仍然需要在计算机上安装旧证书(建议加时间戳),以便平台安装由新证书签名的包。

  • 要利用此功能,需要在旧证书过期之前执行此操作。

  • 此功能适用于 MSIX 包和 MSIX 捆绑包