Files
networkSetup/docs/plan/06-code-signing-and-smartscreen.md
T
jychoi4 24b624301c docs: define MSIX-first packaging design and roadmap
Document package formats, release workflows, deployment planning and UI concepts.

Closes #1
2026-10-27 16:30:00 +09:00

7.9 KiB

코드 서명 서비스와 SmartScreen

현재 1차 범위는 MSIX 우선 제작기다. EXE/MSP·EG-BIM 전환·자체 그룹 배포·Store 제출은 후속으로 유지하며 첫 출시 의존성에서 제외한다. 아래 기존 분석/확장 계약보다 이 범위와 일정 v3가 우선한다.

EXE 내부 PE·MSI·MSP·Burn의 서명 순서와 MSIX 패키지 서명을 구분한다. 직접 배포 MSIX는 manifest Publisher와 인증서 Subject 일치 및 대상 PC의 신뢰를 검사한다. Store MSIX 제출 파일과 Store가 최종 서명한 배포 파일의 상태·해시는 별도이며, 제출용 미서명 파일을 직접 배포 준비 완료로 표시하지 않는다. 범용 출력 설계 참조.

WiX는 설치 패키지 생성 도구다. 회사 명의의 코드 서명 인증서 또는 서명 서비스는 별도로 준비해야 한다. WiX 빌드에서 서명 도구를 호출해 자동화할 수 있다.

역할과 서비스 선택

구성 역할
WiX·Burn MSI·설치 EXE 생성
코드 서명 인증서 또는 서비스 검증된 게시자 신원과 서명용 키 제공
SignTool 등 인증서·서비스를 이용한 서명 및 검증

기존 회사 인증서가 있다면 명의·유효기간·키 접근 방식·빌드 연동 가능 여부를 먼저 확인한다. 새로 도입한다면 Azure Artifact Signing의 Public Trust를 우선 검토한다. 다른 인증기관의 코드 서명 인증서도 선택 가능하다.

Azure Artifact Signing은 Microsoft가 운영하며 이전 이름은 Trusted Signing이다. 게시자에는 신원 확인을 받은 회사의 법인명이 사용된다. 제품을 Microsoft Corporation 명의로 서명해 주는 서비스가 아니다. 이 서비스를 사용하면 해당 서명을 위해 다른 인증기관 인증서를 별도로 구매할 필요는 없다. 서비스 소개, 게시자 명의 FAQ

한국 소재 조직은 현재 Public Trust 신청 대상이다. 개인 개발자는 미국·캐나다 제한이 있다. 일반 공개 배포에는 Public Trust를 사용하며 Public Trust Test나 Private Trust를 대신 사용하지 않는다. 가입 자격은 서비스의 현재 설정 안내에서 확인한다. 일부 Windows 배포 개요 문서의 지역 목록보다 이 서비스 전용 안내를 우선 참고한다.

요금

2026-10-16에 확인한 공식 공개 요금은 다음과 같다.

요금제 계정당 월 기본료 월 포함 서명 초과 서명
Basic US$9.99 5,000회 회당 US$0.005
Premium US$99.99 100,000회 회당 US$0.005

원화 청구액은 적용 환율·세금·계약에 따라 달라진다. 별도 빌드·저장소·CDN 비용은 이 표에 포함하지 않는다. 공식 요금표

과금 단위는 사용자 설치 횟수가 아니라 서명 횟수다. 300개 파일을 각각 한 번 서명하면 약 300회이고, 여기에 MSI·Burn 엔진·최종 설치 파일 및 재서명 횟수를 더한다. 완성된 동일 패키지를 1만 명이 설치해도 그 이유로 추가 서명은 발생하지 않는다. Basic으로 시작하되 실제 파일 수와 릴리스 횟수를 측정한다.

서명 대상

대상 처리
자체 제작 EXE·DLL 최종 빌드 파일을 회사 명의로 서명
IRX 등 기타 확장자 실제 PE 모듈인지 확인하고 지원되는 서명·검증 경로 적용
이미 유효하게 서명된 자체 파일 게시자·무결성 확인 후 유지 가능
외부 DLL·런타임 공급자 서명을 검증·보존, 미서명 파일은 공급자 배포본과 서명·재배포 조건 검토
MSI 패키지 생성 후 서명
MSP 패치 생성 후 서명·타임스탬프, 적용 후 목표 PE 파일의 서명도 검증
Burn 설치 EXE 내부 엔진과 최종 번들 각각 서명
네트워크 설치기·업데이터 각각 서명

이미 존재하는 EXE도 재빌드 없이 서명할 수 있다. 서명은 파일 바이트와 해시를 바꾸므로 최종 해시는 서명 후 계산한다. .NET의 .snk 강력한 이름 서명은 Authenticode 코드 서명을 대체하지 않는다.

Store MSI·EXE 제출은 설치 파일과 포함된 모든 PE 파일의 서명을 요구하므로 설치 EXE만 서명해서는 충분하지 않다. Store 패키지 요구사항

빌드 순서

버전 반영·빌드·난독화 완료
→ 배포 폴더에 파일 수집
→ 기존 서명 검사 및 필요한 PE 파일 서명·타임스탬프
→ 검증
→ MSI 생성·서명·타임스탬프
→ Burn 번들 생성
→ Burn 엔진 서명·재결합·최종 EXE 서명·타임스탬프
→ 최종 검증·해시 계산
→ 업로드

서명 후 버전 정보 변경이나 난독화를 수행하지 않는다. SHA-256과 RFC 3161 타임스탬프를 적용하고, 타임스탬프 실패도 배포 실패로 처리한다. 유효기간 내 서명 증거는 인증서 만료 후 검증에 필요하지만 인증서 폐기 등의 조건도 영향을 준다. SignTool, WiX 서명 연동

패치는 보관된 기준 패키지와 서명이 완료된 목표 파일로 구성된 업데이트 패키지를 입력으로 생성한다. MSP에도 별도로 서명하고 최종 해시를 계산한다. 적용 후 설치되는 자체 PE 파일은 목표 릴리스의 서명·해시와 일치해야 한다. 사용자 PC에 서명 키를 배포하거나 클라이언트에서 재서명하지 않는다. MSP 및 패치용 EXE의 서명 횟수도 요금 산정에 포함한다.

키는 저장소·배포 패키지·사용자 PC에 넣지 않는다. 보호된 서명 서비스 또는 장치를 사용하고 배포 빌드에 필요한 권한만 부여한다. Azure는 인증서가 갱신되므로 업데이터에서 인증서 지문 하나를 영구 고정하지 않는다. 체인·코드 서명 용도·배포자 식별·갱신 정책을 함께 설계한다. 인증서 수명 관리

SmartScreen의 한계

Azure Artifact Signing을 사용해도 SmartScreen 경고가 발생할 수 있다. SmartScreen은 게시자 평판과 해당 파일 해시의 평판을 함께 평가한다. 외부 인증서로 서명했어도 새 파일의 평판이 부족하면 경고가 나올 수 있으며, Azure 서명도 즉시 신뢰를 보장하지 않는다. EV 인증서 역시 현재 경고 면제를 보장하지 않는다. Microsoft SmartScreen 설명

배포 경로 기대할 수 있는 동작
자체 웹 + Azure 서명 유효한 게시자 확인, 초기 SmartScreen 경고 가능
자체 웹 + 외부 OV·EV 서명 유효한 게시자 확인, 초기 SmartScreen 경고 가능
Store에서 직접 설치 공식 안내상 Store 설치 중 SmartScreen 경고 없음, UAC는 가능

Azure 선택의 근거는 비용과 자동화 편의성이다. SmartScreen 경고 제거를 구매 효과로 약속하지 않는다. 일반 사용자의 설치 마찰을 줄이려면 Store 경로를 함께 운영한다. UAC, SmartScreen, 백신 탐지는 서로 다른 기능이므로 경고 종류를 구분해 수집한다. 배포 경로 비교