Files
networkSetup/docs/changes/2026-10-23-developer-signing.md
2026-11-04 16:14:00 +09:00

5.0 KiB

개발자 서명 모드

2026-10-23. Rust 공통 엔진과 Tauri 서명 탭에 테스트용 자체 서명 모드를 추가했다. 여기서 개발자 서명은 유료 Microsoft 서명 서비스가 아니라 현재 사용자 저장소의 자체 서명 인증서를 사용하는 기능이다. Windows 개발자 모드와는 별개다.

사용

  1. 패키지 설정에서 Publisher를 확정한다. 예: CN=Baron MSIX Sample.
  2. 서명 탭에서 개발자 서명 · 테스트용 자체 서명을 선택한다.
  3. 테스트 인증서를 생성하거나 목록에서 기존 인증서를 선택한다. 생성과 선택 결과는 로컬 설정에 저장한다.
  4. 검증·빌드 탭에서 Windows SDK MakeAppx.exe를 연결하고 새 계획을 생성한 뒤 빌드한다. 같은 폴더의 SignTool.exe를 사용한다.
  5. 결과의 공개 CER를 확인하고 설치할 테스트 PC에서 Install-TestCertificate.ps1을 관리자 권한으로 실행한다. 등록 대상은 그 인증서 하나이며 LocalMachine\TrustedPeople에 추가한다. 제작기는 등록이나 앱 설치를 자동 실행하지 않는다.

모드 선택 자체가 테스트용 서명 활성화다. 별도 Windows 개발자 모드나 전역 테스트 모드 토글은 요구하지 않는다. 이후 빌드에는 선택한 인증서를 재사용한다. 새 인증서는 3개월 유효하며 개인 키는 내보낼 수 없도록 생성한다. 인증서가 만료되거나 Publisher가 바뀌면 선택을 다시 해야 한다. 새 인증서를 선택하면 테스트 PC의 신뢰 등록도 별도로 필요하다.

모델과 실행

  • 프로젝트: signing.mode = unsigned | development; 필드가 없는 기존 프로젝트는 unsigned.
  • 로컬: developerCertificateThumbprint; 개인 키와 PFX 비밀번호를 프로젝트에 저장하지 않는다.
  • 계획: 인증서 지문·DER SHA-256·만료일과 SignTool 경로·SHA-256을 고정한다. 빌드 직전에 다시 검사한다.
  • 인증서: 현재 사용자 My 저장소, 개인 키 보유, Subject/Issuer 일치, 정확한 Publisher 일치, 코드 서명 EKU, 유효 기간을 검사한다.
  • 빌드: MakeAppx → SignTool SHA-256 패키지 서명 → CMS 서명과 서명자 검사 → WinVerifyTrust → 역추출 및 기존 파일·identity·registry.dat 검증.
  • WinVerifyTrust 성공 또는 자체 서명 루트 미신뢰 오류 0x800B0109만 허용한다. 후자는 notTrusted로 보고한다. 다른 검증 오류는 실패 처리한다.
  • 결과: selfSignedDevelopment, signingReport와 공개 CER·등록 스크립트·서명 로그. 내보내기에도 포함한다. 설치 시험은 notRun, 일반 배포 준비는 false로 유지한다.
  • 기존 미서명 모드와 운영 서명 프로필 미지원 정책은 유지한다. 내부 EXE/DLL 개별 서명, 타임스탬프와 자동 인증서 갱신은 범위 밖이다.

CLI 예시:

package-builder.exe certificate --project D:\packages\demo\package-project.json --create
package-builder.exe certificate --project D:\packages\demo\package-project.json
package-builder.exe certificate --project D:\packages\demo\package-project.json --thumbprint <40자리 지문>

CLI 사용 전 프로젝트의 signing.mode를 development로 저장한다. 인증서를 선택하지 않았거나 사용할 수 없는 경우 오류를 표시하며 미서명으로 자동 전환하지 않는다.

확인 결과

  • Rust 테스트 22개 통과. 별도 Windows SDK 통합 시험은 기존 두 제품의 미서명 빌드·내용 검사·오래된 계획 거부를 확인한다.
  • 프런트엔드 테스트 8개 통과; TypeScript/Vite 빌드 통과.
  • 작은 레지스트리 샘플을 이용해 기존 신뢰 인증서와 새 미신뢰 인증서로 각각 실제 서명 MSIX 생성 및 역추출 검증 성공.
  • 기존 인증서: trustVerification=passed, winVerifyTrust=0x00000000.
  • 새 인증서: trustVerification=notTrusted, winVerifyTrust=0x800B0109, CMS 서명 검증 성공.
  • Publisher 불일치 인증서 선택 거부, 실패 시 기존 선택 보존, 인증서 재조회, 계획의 인증서 해시 변조 거부, 공개 CER·보고서 내보내기 확인.
  • 이 시험에서 머신 신뢰 저장소를 변경하거나 앱을 설치하지 않았다. 새 테스트 인증서는 해당 사용자 My 저장소에 남겨 재사용할 수 있다. GUI 화면의 실제 클릭 시험은 수행하지 않았다.
  • EG-BIM 대용량 샘플은 다시 생성하지 않았다.

증빙: 시험 결과 JSON. 샘플 위치: output/samples/developer-signing-test-20261023.

근거