C.W.K.
Stream
Lesson 03 of 07 · published

코드 서명 & Notarization

~14 min · tauri, signing, notarization, distribution

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"서명 안 한 앱은 '덜 다듬어진' 게 아냐 — 요즘 OS한텐 '악성코드일 수도'고, 그에 맞게 행동해."

서명이 선택이 아닌 이유

요즘 운영체제는 서명 안 한 코드를 경계해. macOS에선 Gatekeeper가 서명 안 한 앱을 무서운 다이얼로그로 막거나(아예 열기를 거부), Windows에선 SmartScreen이 사용자를 경고해 떼어놔. 코드 서명은 앱을 누가 게시했는지 증명하는 암호학적 신원을 붙여서, OS — 와 사용자 — 가 믿을 수 있게 해. 앱 스토어 밖으로 배포하는 건 뭐든 서명이 사실상 필수지 있으면 좋은 게 아냐.

macOS는 두 단계가 필요해: 서명 + Notarize

macOS가 제일 엄격해. 먼저 Developer ID 인증서로 서명해(Apple Developer 계정, ~$99/년). 그다음 notarize해: 서명된 앱을 Apple에 업로드하면 악성코드를 스캔하고 앱에 'staple'할 티켓을 발급해. notarization 없이는 서명된 앱도 현재 macOS에서 기본 차단돼. Tauri가 Apple 자격증명을 환경 변수로 주면 notarization을 대신 돌려줘 — 보통 CI에서, 절대 하드코딩 안 하고.

Windows와 CI 현실

Windows 서명은 코드 서명 인증서를 써(점점 EV나 클라우드-HSM 기반). Linux는 AppImage/deb엔 보통 서명이 필요 없지만, 저장소는 자기 서명이 있어. 이 모든 것의 실용 패턴: 서명 신원이랑 Apple 자격증명이 CI 시크릿으로 살고, 릴리스 워크플로가 자동으로 서명하고 notarize해. 릴리스가 서명 신원의 유일한 사본을 든 개발자 한 명의 노트북에 의존하길 절대 원하지 않아.

Code

env로 macOS 서명/notarization (CI 시크릿)·bash
# macOS: Tauri가 서명 + notarize에 쓰는 자격증명 (코드 아니라 CI에 설정).
export APPLE_CERTIFICATE="<네 .p12의 base64>"
export APPLE_CERTIFICATE_PASSWORD="<비밀번호>"
export APPLE_SIGNING_IDENTITY="Developer ID Application: Your Name (TEAMID)"
export APPLE_ID="you@example.com"
export APPLE_PASSWORD="<앱 전용 비밀번호>"   # notarization용
export APPLE_TEAM_ID="TEAMID"

npm run tauri build   # 이것들 있으면 서명하고 notarize해

External links

Exercise

먼저 낼 OS의 서명 계획을 써. macOS면: 무슨 계정, 무슨 인증서, 두 단계(서명 + notarize). Windows면: 어떤 종류 인증서랑 그게 없으면 SmartScreen이 뭘 하는지. 그다음 각 시크릿이 어디 살지 말해(힌트: 네 레포 아님). 바이너리를 사용자가 두려움 없이 열 수 있는 것으로 바꾸는 신뢰 층을 지도화하는 거야.
Hint
macOS: Apple Developer 계정 → Developer ID 인증서 → 서명 → notarize(Apple 업로드) → staple. Windows: 코드 서명 인증서(EV가 평판을 빨리 쌓아). 시크릿은 CI의 암호화 저장소에, 빌드 타임에 env 변수로 참조.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.