<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>自己証明書 on kenji.blog</title><link>http://kenji.blog/zh-tw/tags/%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8/</link><description>Recent content in 自己証明書 on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>zh-tw</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 30 Aug 2025 04:18:04 +0900</lastBuildDate><atom:link href="http://kenji.blog/zh-tw/tags/%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8/index.xml" rel="self" type="application/rss+xml"/><item><title>為 msix 加上自簽憑證以便安裝</title><link>http://kenji.blog/zh-tw/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-tw/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>[受信任的根憑證授權單位] -&amp;gt; [憑證]&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>