80 lines
7.1 KiB
Markdown
80 lines
7.1 KiB
Markdown
# 코드 서명 서비스와 SmartScreen
|
|
|
|
WiX는 설치 패키지 생성 도구다. 회사 명의의 코드 서명 인증서 또는 서명 서비스는 별도로 준비해야 한다. WiX 빌드에서 서명 도구를 호출해 자동화할 수 있다.
|
|
|
|
## 역할과 서비스 선택
|
|
|
|
| 구성 | 역할 |
|
|
| --- | --- |
|
|
| WiX·Burn | MSI·설치 EXE 생성 |
|
|
| 코드 서명 인증서 또는 서비스 | 검증된 게시자 신원과 서명용 키 제공 |
|
|
| SignTool 등 | 인증서·서비스를 이용한 서명 및 검증 |
|
|
|
|
기존 회사 인증서가 있다면 명의·유효기간·키 접근 방식·빌드 연동 가능 여부를 먼저 확인한다. 새로 도입한다면 Azure Artifact Signing의 Public Trust를 우선 검토한다. 다른 인증기관의 코드 서명 인증서도 선택 가능하다.
|
|
|
|
Azure Artifact Signing은 Microsoft가 운영하며 이전 이름은 Trusted Signing이다. 게시자에는 신원 확인을 받은 회사의 법인명이 사용된다. 제품을 Microsoft Corporation 명의로 서명해 주는 서비스가 아니다. 이 서비스를 사용하면 해당 서명을 위해 다른 인증기관 인증서를 별도로 구매할 필요는 없다. [서비스 소개](https://azure.microsoft.com/en-us/products/artifact-signing), [게시자 명의 FAQ](https://learn.microsoft.com/en-us/azure/artifact-signing/faq)
|
|
|
|
한국 소재 조직은 현재 Public Trust 신청 대상이다. 개인 개발자는 미국·캐나다 제한이 있다. 일반 공개 배포에는 Public Trust를 사용하며 Public Trust Test나 Private Trust를 대신 사용하지 않는다. 가입 자격은 서비스의 [현재 설정 안내](https://learn.microsoft.com/en-us/azure/artifact-signing/quickstart)에서 확인한다. 일부 Windows 배포 개요 문서의 지역 목록보다 이 서비스 전용 안내를 우선 참고한다.
|
|
|
|
## 요금
|
|
|
|
2026-10-16에 확인한 공식 공개 요금은 다음과 같다.
|
|
|
|
| 요금제 | 계정당 월 기본료 | 월 포함 서명 | 초과 서명 |
|
|
| --- | --- | --- | --- |
|
|
| Basic | US$9.99 | 5,000회 | 회당 US$0.005 |
|
|
| Premium | US$99.99 | 100,000회 | 회당 US$0.005 |
|
|
|
|
원화 청구액은 적용 환율·세금·계약에 따라 달라진다. 별도 빌드·저장소·CDN 비용은 이 표에 포함하지 않는다. [공식 요금표](https://learn.microsoft.com/en-us/azure/artifact-signing/how-to-change-sku)
|
|
|
|
과금 단위는 사용자 설치 횟수가 아니라 서명 횟수다. 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 패키지 요구사항](https://learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msi/app-package-requirements)
|
|
|
|
## 빌드 순서
|
|
|
|
```text
|
|
버전 반영·빌드·난독화 완료
|
|
→ 배포 폴더에 파일 수집
|
|
→ 기존 서명 검사 및 필요한 PE 파일 서명·타임스탬프
|
|
→ 검증
|
|
→ MSI 생성·서명·타임스탬프
|
|
→ Burn 번들 생성
|
|
→ Burn 엔진 서명·재결합·최종 EXE 서명·타임스탬프
|
|
→ 최종 검증·해시 계산
|
|
→ 업로드
|
|
```
|
|
|
|
서명 후 버전 정보 변경이나 난독화를 수행하지 않는다. SHA-256과 RFC 3161 타임스탬프를 적용하고, 타임스탬프 실패도 배포 실패로 처리한다. 유효기간 내 서명 증거는 인증서 만료 후 검증에 필요하지만 인증서 폐기 등의 조건도 영향을 준다. [SignTool](https://learn.microsoft.com/en-us/windows/win32/seccrypto/signtool), [WiX 서명 연동](https://docs.firegiant.com/wix/tools/signing/)
|
|
|
|
패치는 보관된 기준 패키지와 서명이 완료된 목표 파일로 구성된 업데이트 패키지를 입력으로 생성한다. MSP에도 별도로 서명하고 최종 해시를 계산한다. 적용 후 설치되는 자체 PE 파일은 목표 릴리스의 서명·해시와 일치해야 한다. 사용자 PC에 서명 키를 배포하거나 클라이언트에서 재서명하지 않는다. MSP 및 패치용 EXE의 서명 횟수도 요금 산정에 포함한다.
|
|
|
|
키는 저장소·배포 패키지·사용자 PC에 넣지 않는다. 보호된 서명 서비스 또는 장치를 사용하고 배포 빌드에 필요한 권한만 부여한다. Azure는 인증서가 갱신되므로 업데이터에서 인증서 지문 하나를 영구 고정하지 않는다. 체인·코드 서명 용도·배포자 식별·갱신 정책을 함께 설계한다. [인증서 수명 관리](https://learn.microsoft.com/en-us/azure/artifact-signing/concept-certificate-management)
|
|
|
|
## SmartScreen의 한계
|
|
|
|
Azure Artifact Signing을 사용해도 SmartScreen 경고가 발생할 수 있다. SmartScreen은 게시자 평판과 해당 파일 해시의 평판을 함께 평가한다. 외부 인증서로 서명했어도 새 파일의 평판이 부족하면 경고가 나올 수 있으며, Azure 서명도 즉시 신뢰를 보장하지 않는다. EV 인증서 역시 현재 경고 면제를 보장하지 않는다. [Microsoft SmartScreen 설명](https://learn.microsoft.com/en-us/windows/apps/package-and-deploy/smartscreen-reputation)
|
|
|
|
| 배포 경로 | 기대할 수 있는 동작 |
|
|
| --- | --- |
|
|
| 자체 웹 + Azure 서명 | 유효한 게시자 확인, 초기 SmartScreen 경고 가능 |
|
|
| 자체 웹 + 외부 OV·EV 서명 | 유효한 게시자 확인, 초기 SmartScreen 경고 가능 |
|
|
| Store에서 직접 설치 | 공식 안내상 Store 설치 중 SmartScreen 경고 없음, UAC는 가능 |
|
|
|
|
Azure 선택의 근거는 비용과 자동화 편의성이다. SmartScreen 경고 제거를 구매 효과로 약속하지 않는다. 일반 사용자의 설치 마찰을 줄이려면 Store 경로를 함께 운영한다. UAC, SmartScreen, 백신 탐지는 서로 다른 기능이므로 경고 종류를 구분해 수집한다. [배포 경로 비교](https://learn.microsoft.com/en-us/windows/apps/package-and-deploy/code-signing-options)
|