패키지 서명용 인증서 만들기Create a certificate for package signing

이 문서에서는 PowerShell 도구를 사용 하 여 앱 패키지 서명에 대 한 인증서를 만들고 내보내는 방법을 설명 합니다.This article explains how to create and export a certificate for app package signing using PowerShell tools. Visual Studio를 사용 하 여 UWP 앱을 패키지 하 고 데스크톱 앱을 패키징하는 것이 좋지만 visual studio를 사용 하 여 앱을 개발 하지 않은 경우에도 수동으로 앱을 패키지할 수 있습니다.It's recommended that you use Visual Studio for packaging UWP apps and packaging desktop apps, but you can still package an app manually if you did not use Visual Studio to develop your app.

필수 조건Prerequisites

  • 패키지 또는 패키지 되지 않은 앱A packaged or unpackaged app
    AppxManifest.xml 파일을 포함 하는 앱입니다.An app containing an AppxManifest.xml file. 최종 앱 패키지에 서명 하는 데 사용할 인증서를 만드는 동안 매니페스트 파일을 참조 해야 합니다.You will need to reference the manifest file while creating the certificate that will be used to sign the final app package. 수동으로 앱을 패키지 하는 방법에 대 한 자세한 내용은 MakeAppx.exe 도구를 사용 하 여 앱 패키지 만들기를 참조 하세요.For details on how to manually package an app, see Create an app package with the MakeAppx.exe tool.

  • PKI (공개 키 인프라) CmdletPublic Key Infrastructure (PKI) Cmdlets
    서명 인증서를 만들고 내보내려면 PKI cmdlet이 필요 합니다.You need PKI cmdlets to create and export your signing certificate. 자세한 내용은 공개 키 인프라 cmdlet을 참조 하세요.For more information, see Public Key Infrastructure Cmdlets.

자체 서명된 인증서 만들기Create a self-signed certificate

자체 서명 된 인증서는 스토어에 게시할 준비가 되기 전에 응용 프로그램을 테스트 하는 데 유용 합니다.A self-signed certificate is useful for testing your app before you're ready to publish it to the Store. 이 섹션에 설명 된 단계에 따라 자체 서명 된 인증서를 만듭니다.Follow the steps outlined in this section to create a self-signed certificate.

참고

자체 서명 된 인증서를 만들고 사용 하는 경우 인증서를 설치 하 고 신뢰 하는 사용자만 응용 프로그램을 실행할 수 있습니다.When you create and use a self-signed certificate only users who install and trust your certificate can run your application. 이는 테스트를 위해 구현 하기 쉽지만 추가 사용자가 응용 프로그램을 설치 하지 못할 수 있습니다.This is easy to implement for testing but it may prevent additional users from installing your application. 응용 프로그램을 게시할 준비가 되 면 신뢰할 수 있는 원본에서 발급 한 인증서를 사용 하는 것이 좋습니다.When you are ready to publish your application we recommend that you use a certificate issued by a trusted source. 이 중앙 트러스트 시스템은 응용 프로그램 에코 시스템이 악의적인 행위자 로부터 사용자를 보호 하기 위한 검증 수준을 갖도록 보장 하는 데 도움이 됩니다.This system of centralized trust helps to ensure that the application ecosystem has levels of verification to protect users from malicious actors.

패키지 된 앱의 주체 확인Determine the subject of your packaged app

인증서를 사용 하 여 앱 패키지에 서명 하려면 인증서의 "주체"가 앱 매니페스트의 "게시자" 섹션과 일치 해야 합니다 .To use a certificate to sign your app package, the "Subject" in the certificate must match the "Publisher" section in your app's manifest.

예를 들어 앱 AppxManifest.xml 파일의 "Id" 섹션은 다음과 같이 표시 됩니다.For example, the "Identity" section in your app's AppxManifest.xml file should look something like this:

  <Identity Name="Contoso.AssetTracker" 
    Version="1.0.0.0" 
    Publisher="CN=Contoso Software, O=Contoso Corporation, C=US"/>

이 경우 "게시자"는 인증서를 만드는 데 사용 해야 하는 "CN = Contoso Software, O = Contoso Corporation, C = US"입니다.The "Publisher", in this case, is "CN=Contoso Software, O=Contoso Corporation, C=US" which needs to be used for creating your certificate.

New-selfsignedcertificate 를 사용 하 여 인증서 만들기Use New-SelfSignedCertificate to create a certificate

New-selfsignedcertificate PowerShell cmdlet을 사용 하 여 자체 서명 된 인증서를 만듭니다.Use the New-SelfSignedCertificate PowerShell cmdlet to create a self signed certificate. New-selfsignedcertificate 에는 사용자 지정을 위한 몇 가지 매개 변수가 있지만이 문서의 목적을 위해 SignTool와 함께 작동 하는 간단한 인증서를 만드는 데 중점을 둡니다.New-SelfSignedCertificate has several parameters for customization, but for the purpose of this article, we'll focus on creating a simple certificate that will work with SignTool. 이 cmdlet의 예제 및 사용에 대 한 자세한 내용은 new-selfsignedcertificate를 참조 하세요.For more examples and uses of this cmdlet, see New-SelfSignedCertificate.

이전 예제의 AppxManifest.xml 파일을 기반으로 다음 구문을 사용 하 여 인증서를 만들어야 합니다.Based on the AppxManifest.xml file from the previous example, you should use the following syntax to create a certificate. 관리자 권한 PowerShell 프롬프트에서 다음을 수행 합니다.In an elevated PowerShell prompt:

New-SelfSignedCertificate -Type Custom -Subject "CN=Contoso Software, O=Contoso Corporation, C=US" -KeyUsage DigitalSignature -FriendlyName "Your friendly name goes here" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")

일부 매개 변수에 대 한 다음 세부 정보를 확인 합니다.Note the following details about some of the parameters:

  • KeyUsage:이 매개 변수는 인증서를 사용할 수 있는 항목을 정의 합니다.KeyUsage: This parameter defines what the certificate may be used for. 자체 서명 인증서의 경우이 매개 변수를 DigitalSignature로 설정 해야 합니다.For a self-signing certificate, this parameter should be set to DigitalSignature.

  • Textextension:이 매개 변수에는 다음 확장에 대 한 설정이 포함 됩니다.TextExtension: This parameter includes settings for the following extensions:

    • EKU (확장 된 키 사용):이 확장은 인증 된 공개 키를 사용할 수 있는 추가 용도를 나타냅니다.Extended Key Usage (EKU): This extension indicates additional purposes for which the certified public key may be used. 자체 서명 인증서의 경우이 매개 변수에는 인증서가 코드 서명에 사용 됨을 나타내는 "2.5.29.37 = {text} 1.3.6.1.5.5.7.3.3" 확장 문자열이 포함 되어야 합니다.For a self-signing certificate, this parameter should include the extension string "2.5.29.37={text}1.3.6.1.5.5.7.3.3", which indicates that the certificate is to be used for code signing.

    • 기본 제약 조건:이 확장은 인증서가 CA (인증 기관) 인지 여부를 나타냅니다.Basic Constraints: This extension indicates whether or not the certificate is a Certificate Authority (CA). 자체 서명 인증서의 경우이 매개 변수에는 인증서가 CA가 아닌 최종 엔터티 임을 나타내는 "2.5.29.19 = {text}" 확장 문자열이 포함 되어야 합니다.For a self-signing certificate, this parameter should include the extension string "2.5.29.19={text}", which indicates that the certificate is an end entity (not a CA).

이 명령을 실행 하면 "-찾아보십시오" 매개 변수에 지정 된 대로 인증서가 로컬 인증서 저장소에 추가 됩니다.After running this command, the certificate will be added to the local certificate store, as specified in the "-CertStoreLocation" parameter. 또한 명령의 결과는 인증서의 지문을 생성 합니다.The result of the command will also produce the certificate's thumbprint.

다음 명령을 사용 하 여 PowerShell 창에서 인증서를 볼 수 있습니다.You can view your certificate in a PowerShell window by using the following commands:

Set-Location Cert:\CurrentUser\My
Get-ChildItem | Format-Table Subject, FriendlyName, Thumbprint

그러면 로컬 저장소에 있는 모든 인증서가 표시 됩니다.This will display all of the certificates in your local store.

인증서 내보내기Export a certificate

로컬 저장소의 인증서를 PFX (개인 정보 교환) 파일로 내보내려면 get-pfxcertificate cmdlet을 사용 합니다.To export the certificate in the local store to a Personal Information Exchange (PFX) file, use the Export-PfxCertificate cmdlet.

Get-pfxcertificate를 사용 하는 경우 암호를 만들어 사용 하거나 "-ProtectTo" 매개 변수를 사용 하 여 암호 없이 파일에 액세스할 수 있는 사용자 또는 그룹을 지정 해야 합니다.When using Export-PfxCertificate, you must either create and use a password or use the "-ProtectTo" parameter to specify which users or groups can access the file without a password. "-Password" 또는 "-ProtectTo" 매개 변수를 사용 하지 않으면 오류가 표시 됩니다.Note that an error will be displayed if you don't use either the "-Password" or "-ProtectTo" parameter.

암호 사용Password usage

$password = ConvertTo-SecureString -String <Your Password> -Force -AsPlainText 
Export-PfxCertificate -cert "Cert:\CurrentUser\My\<Certificate Thumbprint>" -FilePath <FilePath>.pfx -Password $password

ProtectTo 사용ProtectTo usage

Export-PfxCertificate -cert Cert:\CurrentUser\My\<Certificate Thumbprint> -FilePath <FilePath>.pfx -ProtectTo <Username or group name>

인증서를 만들고 내보낸 후에는 SignTool를 사용 하 여 앱 패키지에 서명할 준비가 된 것입니다.After you create and export your certificate, you're ready to sign your app package with SignTool. 수동 패키징 프로세스의 다음 단계는 SignTool를 사용 하 여 앱 패키지 서명을 참조 하세요.For the next step in the manual packaging process, see Sign an app package using SignTool.

보안 고려 사항Security considerations

로컬 컴퓨터 인증서 저장소에 인증서를 추가 하면 컴퓨터의 모든 사용자에 대 한 인증서 신뢰에 영향을 줍니다.By adding a certificate to local machine certificate stores, you affect the certificate trust of all users on the computer. 이러한 인증서를 사용 하 여 시스템 신뢰를 손상 시키는 것을 방지 하는 것이 더 이상 필요 하지 않은 경우 해당 인증서를 제거 하는 것이 좋습니다.It is recommended that you remove those certificates when they are no longer necessary to prevent them from being used to compromise system trust.