<?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/ko/tags/msix/</link><description>Recent content in Msix on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ko</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 30 Aug 2025 04:18:04 +0900</lastBuildDate><atom:link href="http://kenji.blog/ko/tags/msix/index.xml" rel="self" type="application/rss+xml"/><item><title>'msix에 자체 서명 인증서를 추가하여 설치할 수 있게 만들기'</title><link>http://kenji.blog/ko/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/ko/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에는 &amp;lsquo;반드시 서명된 인증서&amp;rsquo;가 필요하다는 제약이 있습니다.
기업이나 개인이 개발한 앱을 테스트 배포하고 싶을 때, &amp;ldquo;상용 코드 서명 인증서를 구매하는 것은 너무 과하다&amp;quot;고 생각되는 상황도 있을 것입니다.&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 class="n">서명&lt;/span> &lt;span class="n">인증서&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>여기서 생성되는 것은 &amp;lsquo;코드 서명용&amp;rsquo; 인증서입니다.&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">pfx&lt;/span> &lt;span class="n">생성&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에 서명해도 &amp;lsquo;신뢰할 수 없는 인증서&amp;rsquo;라는 경고가 나타나지 않게 됩니다.&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 class="n">서명&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>