<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Msix on kenji.blog</title><link>http://kenji.blog/zh-cn/tags/msix/</link><description>Recent content in Msix on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 30 Aug 2025 04:18:04 +0900</lastBuildDate><atom:link href="http://kenji.blog/zh-cn/tags/msix/index.xml" rel="self" type="application/rss+xml"/><item><title>使用自签名证书实现 MSIX 的安装</title><link>http://kenji.blog/zh-cn/p/msix%E3%81%AB%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%92%E3%81%A4%E3%81%91%E3%81%A6%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/</link><pubDate>Sat, 30 Aug 2025 04:18:04 +0900</pubDate><guid>http://kenji.blog/zh-cn/p/msix%E3%81%AB%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%92%E3%81%A4%E3%81%91%E3%81%A6%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/msix%E3%81%AB%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%92%E3%81%A4%E3%81%91%E3%81%A6%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/img.png" alt="Featured image of post 使用自签名证书实现 MSIX 的安装" />&lt;h1 id="使用自签名证书实现-msix-的安装">使用自签名证书实现 MSIX 的安装
&lt;/h1>&lt;p>在 Windows 上分发应用时，使用 &lt;strong>MSIX 包&lt;/strong> 可以统一安装和更新的机制，非常方便。但是，MSIX 有一个限制，即“必须使用经过签名的证书”。
当我们想要测试分发企业或个人开发的应用时，可能会觉得“购买商用代码签名证书太过夸张”吧。&lt;/p>
&lt;p>这时，&lt;strong>自签名证书（Self-Signed Certificate）&lt;/strong> 就能派上用场了。本文将总结为 MSIX 添加自签名证书，使其能够在本地环境中进行安装的步骤。&lt;/p>
&lt;hr>
&lt;h2 id="1-创建自签名证书">1. 创建自签名证书
&lt;/h2>&lt;p>首先，以管理员身份启动 PowerShell，并执行以下命令。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="p">//&lt;/span> &lt;span class="n">创建自签名证书&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">New-SelfSignedCertificate&lt;/span> &lt;span class="n">-Type&lt;/span> &lt;span class="n">CodeSigningCert&lt;/span> &lt;span class="n">-Subject&lt;/span> &lt;span class="s2">&amp;#34;CN=035A9AAC-915B-4CE1-AE39-1A101BED42F5&amp;#34;&lt;/span> &lt;span class="n">-CertStoreLocation&lt;/span> &lt;span class="n">Cert&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">CurrentUser&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">My&lt;/span> &lt;span class="n">-NotAfter&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nb">Get-Date&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="py">AddYears&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">10&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">-KeyUsage&lt;/span> &lt;span class="n">DigitalSignature&lt;/span> &lt;span class="n">-FriendlyName&lt;/span> &lt;span class="s2">&amp;#34;kenjinote&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>此处创建的是“用于代码签名”的证书。&lt;/p>
&lt;ul>
&lt;li>使用 &lt;code>-FriendlyName&lt;/code> 赋予一个容易理解的名称，以后会更容易查找。&lt;/li>
&lt;li>使用 &lt;code>-NotAfter&lt;/code> 可以调整有效期。本次设置为 10 年。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="2-导出-pfx-文件">2. 导出 PFX 文件
&lt;/h2>&lt;p>将创建的证书导出为 PFX 格式，以便在 &lt;code>signtool&lt;/code> 中使用。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="p">//&lt;/span> &lt;span class="n">创建&lt;/span> &lt;span class="n">pfx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$cert&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-ChildItem&lt;/span> &lt;span class="n">Cert&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">CurrentUser&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">My&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">Where-Object&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">FriendlyName&lt;/span> &lt;span class="o">-eq&lt;/span> &lt;span class="s2">&amp;#34;kenjinote&amp;#34;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$password&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">ConvertTo-SecureString&lt;/span> &lt;span class="n">-String&lt;/span> &lt;span class="s2">&amp;#34;password&amp;#34;&lt;/span> &lt;span class="n">-Force&lt;/span> &lt;span class="n">-AsPlainText&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Export-PfxCertificate&lt;/span> &lt;span class="n">-Cert&lt;/span> &lt;span class="nv">$cert&lt;/span> &lt;span class="n">-FilePath&lt;/span> &lt;span class="s2">&amp;#34;D:\pfx\cert.pfx&amp;#34;&lt;/span> &lt;span class="n">-Password&lt;/span> &lt;span class="nv">$password&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>此时设置的密码（示例中为 &lt;code>password&lt;/code>），在后续的签名操作中会用到。&lt;/p>
&lt;hr>
&lt;h2 id="3-将自签名证书安装到受信任的根证书颁发机构">3. 将自签名证书安装到受信任的根证书颁发机构
&lt;/h2>&lt;p>创建的证书按原样是不会被 Windows 信任的。要安装它，需要从 &lt;code>certmgr.msc&lt;/code> 导入到 &lt;strong>[受信任的根证书颁发机构] → [证书]&lt;/strong> 中。&lt;/p>
&lt;p>导入导出的证书（&lt;code>.cer&lt;/code> 或 &lt;code>.pfx&lt;/code>）后，在目标 PC 上就会被视为受信任的证书。
这样一来，即使对 MSIX 进行了签名，也不会出现“不受信任的证书”的警告了。&lt;/p>
&lt;hr>
&lt;h2 id="4-为安装程序-msix-添加签名">4. 为安装程序 (MSIX) 添加签名
&lt;/h2>&lt;p>最后，使用创建的 PFX 证书对 MSIX 进行签名。&lt;code>signtool&lt;/code> 包含在 Visual Studio 和 Windows SDK 中。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="p">//&lt;/span> &lt;span class="n">为安装程序添加签名&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">signtool&lt;/span> &lt;span class="n">sign&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">fd&lt;/span> &lt;span class="n">SHA256&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">f&lt;/span> &lt;span class="s2">&amp;#34;D:\pfx\cert.pfx&amp;#34;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="s2">&amp;#34;password&amp;#34;&lt;/span> &lt;span class="s2">&amp;#34;C:\installer\installer.msix&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>&lt;code>/fd SHA256&lt;/code> 指定了签名算法。&lt;/li>
&lt;li>&lt;code>/f&lt;/code> 指定 PFX 文件，&lt;code>/p&lt;/code> 传递密码。&lt;/li>
&lt;li>最后请指定 MSIX 文件的路径。&lt;/li>
&lt;li>如果没有配置 signtool 的环境变量路径，请指定完整路径。在我的环境中，它位于以下位置。&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\microsoft.windows.sdk.buildtools&lt;/span>&lt;span class="se">\10&lt;/span>&lt;span class="s2">.0.26100.1742&lt;/span>&lt;span class="se">\b&lt;/span>&lt;span class="s2">in&lt;/span>&lt;span class="se">\10&lt;/span>&lt;span class="s2">.0.26100.0&lt;/span>&lt;span class="se">\x64&lt;/span>&lt;span class="s2">\signtool.exe&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>至此，签名完成，可以在目标 PC 上安装的 MSIX 就准备好了。&lt;/p>
&lt;hr>
&lt;h2 id="总结">总结
&lt;/h2>&lt;ul>
&lt;li>使用 &lt;strong>New-SelfSignedCertificate&lt;/strong> 创建自签名证书&lt;/li>
&lt;li>使用 &lt;strong>Export-PfxCertificate&lt;/strong> 导出 PFX&lt;/li>
&lt;li>将证书安装到 &lt;strong>受信任的根证书颁发机构&lt;/strong>&lt;/li>
&lt;li>使用 &lt;strong>signtool&lt;/strong> 对 MSIX 进行签名&lt;/li>
&lt;/ul>
&lt;p>掌握了这个流程，就可以在不购买商用证书的情况下，在本地环境中进行运行确认和测试分发了。
当然，在实际的商用分发中，证书颁发机构签发的证书是必不可少的，但在开发和验证阶段，这种方法非常方便。&lt;/p>
&lt;hr>
&lt;p>👉 本次以 installer.msix 为例，但同样的步骤也适用于自研应用。&lt;/p>
&lt;hr></description></item></channel></rss>