다음을 통해 공유


앱 패키지 서명 오류를 해결하는 방법

앱 배포 실패는 앱 패키지의 디지털 서명 유효성을 검사하지 못하여 발생할 수 있습니다. 이러한 실패를 인식하는 방법과 이러한 오류에 대해 수행할 작업을 알아봅니다.

패키지된 Windows 앱을 배포할 때 Windows는 항상 앱 패키지에서 디지털 서명의 유효성을 검사하려고 시도합니다. 패키지의 서명 유효성 검사 블록 배포 중 오류가 발생했습니다. 그러나 패키지가 유효성을 검사하지 않은 이유는 명확하지 않을 수 있습니다. 특히 로컬 테스트를 위해 프라이빗 인증서를 사용하여 패키지에 서명하는 경우 해당 인증서에 대한 신뢰도 관리해야 하는 경우가 많습니다. 잘못된 인증서 신뢰 구성으로 인해 서명 유효성 검사 오류가 발생할 수 있습니다.

알아야 하는 작업

기술

사전 요구 사항

지침

1단계: 이벤트 로그에서 진단 정보 검사

앱을 배포하려고 시도한 방법에 따라 배포 실패에 대한 의미 있는 오류 코드가 수신되지 않았을 수 있습니다. 이 경우 일반적으로 이벤트 로그에서 직접 오류 코드를 가져올 수 있습니다.

이벤트 로그에서 오류 코드를 얻으려면

  1. eventvwr.msc를 실행합니다.

  2. 이벤트 뷰어(로컬)>애플리케이션 및 서비스 로그Microsoft>Windows로 > 이동합니다.

  3. 검사 첫 번째 로그는 AppxPackagingOM>Microsoft-Windows-AppxPackaging/Operational입니다.

  4. 배포 관련 오류는 AppXDeployment-Server>Microsoft-Windows-AppXDeploymentServer/Operational에 기록됩니다.

    배포 오류는 가장 최근의 오류 이벤트 404를 검색합니다. 이 오류 이벤트는 오류 코드와 배포가 실패한 이유에 대한 설명을 제공합니다. 오류 이벤트 465가 404 이벤트 앞에 있는 경우 패키지를 여는 데 문제가 있습니다.

465 오류가 발생하지 않은 경우 Windows 앱의 일반 패키징, 배포 및 쿼리 문제 해결을 참조하세요. 그렇지 않으면 오류 이벤트 465에 대한 오류 문자열에 표시할 수 있는 일반적인 오류 코드는 이 표를 참조하세요.

오류 코드 오류 Description 제안 해결 방법
0x80073CF0 ERROR_INSTALL_OPEN_PACKAGE_FAILED 앱 패키지를 열 수 없습니다. 이 오류는 일반적으로 패키지에 문제가 있음을 나타냅니다. 패키지를 다시 빌드하고 서명해야 합니다. 자세한 내용은 앱 패키지 사용 을 참조하세요.
0x80080205 APPX_E_INVALID_BLOCKMAP 앱 패키지가 변조되었거나 잘못된 블록 맵이 있습니다. 패키지가 손상되었습니다. 패키지를 다시 빌드하고 서명해야 합니다. 자세한 내용은 앱 패키지 사용 을 참조하세요.
0x800B0004 TRUST_E_SUBJECT_NOT_TRUSTED 앱 패키지가 변조되었습니다. 패키지 내용이 더 이상 디지털 서명과 일치하지 않습니다. 패키지에 다시 서명해야 합니다. 자세한 내용은 SignTool을 사용하여 앱 패키지에 서명하는 방법을 참조하세요.
0x800B0100 TRUST_E_NOSIGNATURE 앱 패키지가 서명되지 않았습니다. 서명된 Windows 앱 패키지만 배포할 수 있습니다. 앱 패키지 서명에 대한 자세한 내용은 SignTool을 사용하여 앱 패키지에 서명하는 방법을 참조하세요.
0x800B0109 CERT_E_UNTRUSTED_ROOT 앱 패키지에 서명하는 데 사용된 인증서 체인은 신뢰할 수 없는 루트 인증서로 끝납니다. 인증서 신뢰 문제를 해결하려면 2단계를 계속 진행합니다.
0x800B010A CERT_E_CHAINING 앱 패키지에 서명하는 데 사용된 인증서에서 신뢰할 수 있는 루트 기관에 인증서 체인을 빌드할 수 없습니다. 인증서 신뢰 문제를 해결하려면 2단계를 계속 진행합니다.

 

2단계: 앱 패키지 서명에 사용되는 인증서 체인 확인

로컬 컴퓨터에서 신뢰해야 하는 인증서를 파악하려면 앱 패키지의 디지털 서명에 대한 인증서 체인을 검사할 수 있습니다.

인증서 체인을 확인하려면

  1. 파일 탐색기 앱 패키지를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
  2. 속성 대화 상자에서 디지털 서명 탭을 선택하면 서명의 유효성을 검사할 수 있는지 여부도 표시됩니다.
  3. 서명 목록에서 서명을 선택한 다음 세부 정보 단추를 클릭합니다.
  4. 디지털 서명 세부 정보 대화 상자에서 인증서 보기 단추를 클릭합니다.
  5. 인증서 대화 상자에서 인증 경로 탭을 선택합니다.

체인의 최상위 인증서는 루트 인증서이고 아래쪽 인증서는 서명 인증서입니다. 단일 인증서만 체인에 있는 경우 서명 인증서도 자체 루트 인증서입니다. Certutil에서 사용하는 각 인증서의 일련 번호를 확인할 수 있습니다.

각 인증서의 일련 번호를 확인하려면

  1. 인증 경로 창에서 인증서를 선택한 다음 인증서 보기를 클릭합니다.
  2. 인증서 대화 상자에서 인증서의 일련 번호 및 기타 유용한 속성을 표시하는 세부 정보 탭을 선택합니다.

3단계: 로컬 컴퓨터에서 신뢰할 수 있는 인증서 확인

앱 패키지를 배포하려면 사용자의 컨텍스트뿐만 아니라 로컬 컴퓨터 컨텍스트에서도 신뢰할 수 있어야 합니다. 따라서 디지털 서명은 이전 단계의 디지털 서명 탭에서 볼 때 유효하게 표시될 수 있지만 앱 패키지를 배포하는 동안 유효성 검사에 실패합니다.

앱 패키지에 서명하는 데 사용되는 인증서 체인이 로컬 컴퓨터에서 특별히 신뢰할 수 있는지 확인하려면

  1. 다음 명령을 실행합니다.

    CertUtil.exe -store Root rootCertSerialNumber
    
  2. 다음 명령을 실행합니다.

    CertUtil.exe -store TrustedPeople signingCertSerialNumber
    

인증서 일련 번호를 지정하지 않으면 Certutil 은 해당 저장소에 대한 로컬 컴퓨터에서 신뢰하는 모든 인증서를 나열합니다.

서명 인증서가 자체 서명되지 않고 루트 인증서가 로컬 컴퓨터의 루트 저장소에 있더라도 인증서 연결 오류로 인해 패키지를 설치하지 못할 수 있습니다. 이 경우 중간 인증 기관에 대한 신뢰에 문제가 있을 수 있습니다. 이 문제에 대한 자세한 내용은 인증서 작업을 참조하세요.

설명

서명 인증서를 신뢰할 수 없어 패키지를 배포할 수 없다고 판단한 경우 패키지를 시작한 위치를 알고 신뢰하지 않는 한 패키지를 설치하지 마세요.

설치를 위해 앱을 수동으로 신뢰하려는 경우(예: 테스트 서명된 자체 앱 패키지를 설치하려면) 앱 패키지에서 로컬 컴퓨터 인증서 신뢰에 인증서를 수동으로 추가할 수 있습니다.

로컬 컴퓨터 인증서 신뢰에 인증서를 수동으로 추가하려면

  1. 파일 탐색기 앱 패키지를 마우스 오른쪽 단추로 클릭하고 팝업 상황에 맞는 메뉴에서 속성을 선택합니다.
  2. 속성 대화 상자에서 디지털 서명 탭을 선택합니다.
  3. 서명 목록에서 서명을 선택한 다음 세부 정보 단추를 클릭합니다.
  4. 디지털 서명 세부 정보 대화 상자에서 인증서 보기 단추를 클릭합니다.
  5. 인증서 대화 상자에서 인증서 설치... 단추를 클릭합니다.
  6. 인증서 가져오기 마법사에서 로컬 컴퓨터를 선택하고 다음을 클릭합니다. 계속하려면 관리자 권한을 부여해야 합니다.
  7. 다음 저장소에 모든 인증서 배치를 선택하고 신뢰할 수 있는 사람 저장소 이동합니다.
  8. 다음을 클릭한 다음 마침을 클릭하여 마법사를 완료합니다.

이 수동 추가 후에는 인증서 대화 상자 에서 인증서를 신뢰할 수 있음을 확인할 수 있습니다.

인증서가 더 이상 필요하지 않으면 인증서를 제거할 수 있습니다.

인증서를 제거하려면

  1. 관리자 권한으로 Cmd.exe 실행합니다.

  2. 관리자 명령 프롬프트에서 다음 명령을 실행합니다.

    Certutil -store TrustedPeople
    
  3. 설치한 인증서의 일련 번호를 찾습니다. 이 숫자는 certID입니다.

  4. 다음 명령을 실행합니다.

    Certutil -delStore TrustedPeople certID
    

로컬 머신 신뢰할 수 있는 루트 인증 기관 인증서 저장소에 루트 인증서를 수동으로 추가하지 않는 것이 좋습니다. LOB(기간 업무) 애플리케이션과 같이 동일한 루트 인증서에 연결된 인증서로 서명된 여러 애플리케이션을 갖는 것이 신뢰할 수 있는 사람 저장소에 개별 인증서를 설치하는 것보다 더 효율적일 수 있습니다. 신뢰할 수 있는 사람 저장소에는 기본적으로 신뢰할 수 있는 것으로 간주되는 인증서가 포함되어 있으므로 상위 기관 또는 인증서 신뢰 목록 또는 체인에서 확인되지 않습니다. 신뢰할 수 있는 루트 인증 기관 인증서 저장소에 인증서를 추가하는 방법에 대한 고려 사항은 코드 서명 모범 사례를 참조하세요.

보안 고려 사항

로컬 컴퓨터 인증서 저장소에 인증서를 추가하면 컴퓨터의 모든 사용자의 인증서 신뢰에 영향을 줍니다. 앱 패키지를 테스트하려는 코드 서명 인증서를 신뢰할 수 있는 사람 인증서 저장소에 설치하는 것이 좋습니다. 시스템 신뢰를 손상시키는 데 사용되지 않도록 더 이상 필요하지 않은 경우 해당 인증서를 즉시 제거합니다. 앱 패키지 서명에 대한 고유한 테스트 인증서를 만드는 경우 테스트 인증서와 연결된 권한을 제한하는 것이 좋습니다. 앱 패키지 서명에 대한 테스트 인증서를 만드는 방법에 대한 자세한 내용은 앱 패키지 서명 인증서를 만드는 방법을 참조하세요.

샘플

앱 패키지 만들기 샘플

개념

Windows 앱의 패키징, 배포 및 쿼리 문제 해결

인증서 관리를 위한 Certutil 작업