sgcSign Server

sgcSign 엔진을 REST API, Bootstrap 웹 관리자 콘솔, 즉시 사용 가능한 CI/CD 파이프라인으로 감싼 자체 호스팅 원격 코드 서명 데몬이에요.

REST API + 웹 관리자
7가지 서명 형식
멀티 테넌트 프로젝트
해시 체인 감사 로그

제공되는 기능

단일 Windows 호스트가 빌드 에이전트, 개발자, CI 파이프라인의 서명 요청을 수락해요. 완전한 감사, 승인, 메트릭이 내장돼 있어요.

REST API

서명, 검증, 상태 확인, 메트릭, 승인 워크플로를 위한 TLS 보안 /api/v1 엔드포인트예요. 빌드 에이전트와 SDK를 위한 안정적이고 머신 친화적인 계약이에요.

웹 관리자 콘솔

사용자, API 키, 공급자, 프로젝트, 감사, 승인, 웹훅, 메트릭을 위한 Bootstrap 기반 /admin UI예요. 운영자는 JSON을 편집할 필요가 없어요.

Windows 서비스 설치 프로그램

Inno Setup 마법사 또는 zip 압축 해제로 설치해요. 데몬은 스스로를 Windows 서비스로 등록하고, TLS를 자체 처리하며, 강화된 호스트에서 무인으로 실행돼요.

멀티 테넌트 프로젝트

각 프로젝트는 공급자, API 키, 감사 가시성, 승인 대기열의 하위 집합을 격리해요. 여러 팀이 서로의 서명 자료를 보지 않고 서버 하나를 공유해요.

2단계 승인 워크플로

동일한 API 키로 요청하고, 관리자 또는 프로젝트 관리자가 승인 또는 거부하면 그때만 바이트가 서명돼요. SHA-256 해시와 파일 크기가 요청에 잠겨요.

SHA-256 감사 로그

모든 작업 — 서명, 검증, 로그인, 승인, 웹훅 실행 — 이 해시 체인 감사 로그에 추가돼요. 변조가 감지 가능하며, SIEM 스크래핑이 간단해요.

Prometheus 메트릭

서명 / 검증 / 승인 카운터, 서명 지연 시간 히스토그램, 공급자 가용성 게이지예요. 추가 데이터베이스 없이 직접 Prometheus 0.0.4 텍스트 노출을 지원해요.

HMAC 서명 웹훅

13가지 수명 주기 이벤트가 X-Sgcsign-Signature: sha256=…와 함께 전달돼요. 3회 재시도 대기열이 SIEM, 채팅, 티켓팅 시스템을 동기화해요.

XAdES · PAdES · CAdES

라이브러리에 포함된 동일한 엔진이 REST API를 통해 노출돼요. 모든 국가 프로파일, 모든 서명 수준을 지원해요.

XAdES

VeriFactu, FatturaPA, Facturae, KSeF, e-Factura, Peppol, myDATA 및 EU 고용 계약을 위한 XML 서명이에요. POST /api/v1/sign/xades.

PAdES

원본 내용을 보존하는 증분 업데이트가 포함된 PAdES-Basic PDF 서명이에요. 보이는 또는 보이지 않는 서명을 지원해요. POST /api/v1/sign/pades.

CAdES

임의 바이너리 데이터를 위한 CMS / PKCS#7 분리형 또는 첨부형 서명이에요. 타임스탬프 + 장기 유효성 검사를 지원해요. POST /api/v1/sign/cades.

Authenticode, ClickOnce, NuGet, VSIX

서명 데몬은 구성한 인증서 소스와 통신해요: Windows 저장소, PFX, PKCS#11 하드웨어 토큰, Azure Trusted Signing, AWS KMS, Google KMS.

Authenticode

.exe, .dll, .msi, .cab, .cat, .ocx, .sys에 서명해요. 해시 전용 모드를 사용하면 저대역폭 러너가 수십 바이트로 8KB PKCS#7 블롭을 교환할 수 있어요.

ClickOnce

ClickOnce 매니페스트(.application / .manifest)에 서명하면 Windows 클라이언트가 신뢰 프롬프트 없이 설치해요. POST /api/v1/sign/clickonce.

NuGet 패키지

NuGet 클라이언트가 게시자 ID를 검증하도록 .nupkg 패키지에 서명해요. 작성자 및 리포지토리 서명을 지원해요. POST /api/v1/sign/nuget.

VSIX 확장

VS Marketplace 및 IDE가 신뢰할 수 있도록 Visual Studio 확장 패키지에 서명해요. POST /api/v1/sign/vsix.

모든 주요 파이프라인에 즉시 적용

빌드 에이전트는 모든 러너에 서명 인증서를 설치하는 대신 안정적인 REST 엔드포인트를 호출해요.

GitHub Actions

컴포지트 액션이 아티팩트를 서버의 REST API에 게시해요. 웹 관리자가 발급한 토큰은 프로젝트로 범위가 지정되며, 러너 시크릿 저장소를 절대 벗어나지 않아요.

Azure DevOps

파이프라인 태스크가 sgcSign CLI 클라이언트를 실행해요. 바이너리를 업로드하고, 필요한 경우 승인을 폴링하고, 서명된 결과를 다운로드해요 — 모두 한 단계로요.

Jenkins

curl 또는 번들 CLI를 사용하는 선언적 파이프라인 스니펫이에요. Linux 및 Windows 에이전트 모두에서 작동하며, 서명은 빌드 아티팩트로 나타나요.

Docker

데몬과 샘플 공급자 구성이 포함된 이미지예요. 컨테이너를 실행하고 TLS 인증서 + 공급자 시크릿을 마운트하면 이식 가능한 서명 서비스가 생성돼요.

Helm Chart

완전히 이중화된 확장형 서명을 위해 Kubernetes에 배포해요. 클라우드 KMS(Azure Trusted Signing, AWS KMS, Google KMS)와 결합하면 키 없는 파드를 구성할 수 있어요.

구성 요소가 어떻게 맞물리는지

단일 Windows 서비스가 TLS를 종료하고 /api/v1 + /admin을 노출하며, 모든 호출에서 구성된 키 공급자에 접근해요. 키 자료는 데이터베이스에 절대 저장되지 않아요.

단일 바이너리, 세 가지 인터페이스

  • 빌드 에이전트는 bearer API 키로 HTTPS를 통해 /api/v1을 호출해요.
  • 운영자는 어떤 브라우저에서든 /admin에 로그인해요. Bootstrap UI, 세션 쿠키, 역할 기반 액세스를 제공해요.
  • 키 공급자는 PFX, Windows 저장소, PKCS#11, Azure TS, AWS KMS, GCloud KMS, Vault, Certum, CSC v2에서 요청 시 가져와요.
  • SQLite 데이터베이스는 사용자, API 키, 감사 로그, 세션, 웹훅 대기열을 저장해요. 키 자료 자체는 절대 저장하지 않아요.
  • 웹훅은 감사된 모든 이벤트에서 SIEM 및 채팅 시스템으로 비동기적으로 실행돼요.
topology.txt
                +----------------------------+
                |   Build agents / CI / CLI  |
                +-------------+--------------+
                              |
                              | HTTPS (TLS 1.2/1.3)
                              v
        +-------------------------------------------+
        |   sgcSignServer.exe   (Windows service)   |
        |   /api/v1/*    (signing, verify, health)  |
        |   /admin/*     (web console, sessions)    |
        +---+-----------------+---------------------+
            |                 |                |
            v                 v                v
     +-------------+   +---------------+   +-----------+
     |  SQLite DB  |   | KeyProviders  |   |  Webhooks |
     | (audit/keys)|   | PFX/HSM/KMS   |   | (outbound)|
     +-------------+   +---------------+   +-----------+

curl 한 번으로 서명

bearer API 키, 멀티파트 업로드, 그리고 서명된 바이너리가 stdout으로 스트림돼요. Authenticode, CAdES, PAdES, XAdES, ClickOnce, NuGet, VSIX가 동일한 형태를 공유해요.

.exe 파일을 한 번의 호출로 서명하기

  • X-API-Key 또는 Authorization: Bearer — 두 인증 방법 모두 작동해요.
  • X-Project가 테넌트를 선택해요. 키는 해당 프로젝트에 대해 승인되어 있어야 해요.
  • 응답에는 로그 상관 관계를 위한 X-Sgcsign-Signer-Subject + X-Sgcsign-Duration-Ms가 포함돼요.
  • Authenticode의 해시 전용 모드: SHA-256을 전송하면 작은 PKCS#7 블롭을 받아요.
sign-binary.sh
# Authenticode-sign MyApp.exe via the REST API
curl -X POST https://sign.example.com/api/v1/sign \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Project: production" \
  -F "format=authenticode" \
  -F "file=@./MyApp.exe" \
  -o MyApp-signed.exe

# Headers returned by the server
# X-Sgcsign-Signer-Subject: CN=ACME Corp, O=ACME, C=US
# X-Sgcsign-Duration-Ms: 312

서명된 바이너리까지 세 단계

새 Windows 호스트에서 첫 서명 아티팩트까지 5분 이내예요.

1

설치

번들 Inno Setup 마법사를 실행하거나 zip 파일을 폴더에 압축 해제해요. 데몬은 스스로를 sgcSignServer라는 Windows 서비스로 등록해요. :8443에 바인딩하고 TLS 인증서를 로드하세요.

2

키 공급자 구성

sgcSignServer.conf.json에 공급자를 추가해요 — PFX 파일, Azure Trusted Signing 계정, AWS KMS 키, Certum SimplySign 사용자, 또는 기타 10가지 키 공급자 중 하나예요. 서비스 재시작이 필요 없어요.

3

토큰 발급 후 API 호출

/admin/apikeys를 열고 새 API 키를 클릭하고 프로젝트로 범위를 지정한 다음, CI 러너 시크릿에 토큰을 복사하세요. 빌드 에이전트가 POST /api/v1/sign을 호출해요.

빌드 팜 전체의 서명을 중앙화하세요

모든 빌드 에이전트에 서명 인증서를 복사하는 것을 멈추세요. sgcSign 서버 하나, REST 엔드포인트 하나, 완전한 감사와 승인이에요.