sgcSign Server

sgcSign 엔진을 REST API, Bootstrap 웹 관리자 콘솔, CI/CD 파이프라인용 명령줄 클라이언트로 감싼 자체 호스팅 원격 코드 서명 데몬이에요.

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

제공되는 기능

Windows 또는 Linux 단일 호스트가 빌드 에이전트, 개발자, 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 서명 웹훅

21가지 수명 주기 이벤트가 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.

체코 EET 2.0

서버가 보관하는 키로 등록된 매출을 생성하고 서명하며, 필요하면 세무 당국에 전송해 응답을 반환해요. 체인 매장의 여러 계산대가 하나의 납세자 인증서를 공유할 수 있어요. POST /api/v1/sign/eet.

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 블롭을 교환할 수 있어요. --page-hashes(API에서는 page_hashes)를 추가하면 커널 모드 드라이버에 signtool /ph와 같은 페이지 해시를 넣어요.

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.

보안 및 접근

관리 콘솔에 더 강력한 로그인을 적용하고 디스크의 비밀 정보를 암호화해요. 비밀번호가 도난되거나 설정 파일이 복사되어도 서명 키는 열리지 않아요.

2단계 인증 로그인

콘솔 계정은 모든 TOTP 인증 앱의 6자리 코드를 추가로 사용하고, 휴대폰을 분실했을 때를 위한 일회용 복구 코드 10개가 제공돼요. admin.require_2fa를 설정하면 모든 콘솔 사용자가 다른 페이지에 접근하기 전에 먼저 등록해야 해요. 관리자는 분실된 두 번째 인증 요소를 초기화할 수 있어요.

OpenID Connect 로그인

PKCE를 사용하는 인증 코드 흐름으로 Microsoft Entra ID, Okta, Keycloak, Google 또는 표준 OpenID Connect 공급자를 통해 콘솔에 로그인해요. 사용자는 외부 ID를 자신의 계정에 연결할 수 있고, 신규 사용자는 선택적으로 관리자가 승인하는 계정을 요청할 수 있어요.

콘솔 보안 강화

모든 응답에 보안 헤더와 엄격한 Content Security Policy가 포함돼요. 설정 가능한 비밀번호 정책, 첫 로그인 시 반드시 교체해야 하는 임시 비밀번호, 그리고 역할이나 권한이 바뀌는 즉시 종료되는 세션을 제공해요.

저장 시 암호화되는 비밀 정보

공급자 비밀번호, PIN, 클라우드 자격 증명, 웹훅 비밀 정보는 컴퓨터에 바인딩된 마스터 키(Windows에서는 DPAPI)로 AES-256-GCM 암호화되어 저장돼요. sgcSignServer --protect-secrets는 기존 설정을 그 자리에서 암호화해요.

서명 제어 및 타임스탬프

서버가 누가, 어떤 키로, 누구의 승인 후에 서명할 수 있는지 결정하며, 타임스탬프 서버 하나가 중단되어도 모든 서명에 타임스탬프가 적용돼요.

강제 승인

공급자나 프로젝트 전체를 승인 필수로 지정하면 서버는 approval_required 오류로 직접 서명을 거부해요. 승인 한 건으로는 한 번만 서명할 수 있어요. 이 규칙은 signtool /dlib용 원시 다이제스트 서명을 포함한 모든 서명 경로에 적용돼요.

API 키 수명 주기

키를 재생성하는 동안 이전 비밀 값이 최대 7일간 계속 동작하며, 만료일을 수정하고, 소유자를 확인하고, 허용된 공급자 목록으로 제한할 수 있어요. api_keys.self_service를 사용하면 운영자가 설정한 한도 안에서 자신의 키를 직접 만들고 관리해요. 키는 첫 사용 시점부터 유효기간이 시작되도록 설정할 수도 있습니다. 첫 인증 호출부터 N일 동안 유효하며, 필수인 “활성화 기한” 날짜가 있어 사용하지 않은 키가 영원히 유효한 상태로 남지 않습니다. 하위 키는 상위 키가 활성화된 후에만 동작하고, 활성화는 감사 로그에 apikey.activate로 기록되며, Community 에디션은 두 값을 모두 30일로 제한합니다.

PKCS#11 PIN 재시도 보호

서버는 토큰별로 잘못된 PIN 결과를 세고 max_pin_attempts 이후에는 로그인을 중단하므로, 설정에 잘못된 PIN이 있어도 하드웨어 토큰이 잠기지 않아요. 마지막 시도는 allow_final_pin_try가 있을 때만 사용하고, 관리자는 콘솔에서 보호 상태를 초기화해요.

CLI 저장 프로필

sgcsign config는 서버, 공급자 및 기타 설정을 이름이 있는 프로필에 저장하고 sgcsign auth set-key는 API 키를 저장하므로, 빌드 스크립트에서 반복해서 지정할 필요가 없어요. Delphi CLI와 .NET 도구 esegece.sgcsign.cli는 같은 파일을 공유해요.

자동 대체 기능이 있는 타임스탬프

  • 서버 전체에 적용되는 기본 RFC 3161 타임스탬프 서버 목록을 하나가 응답할 때까지 순서대로 시도해요.
  • 공급자별 tsa_urls 목록, 그리고 타임스탬프를 적용하면 안 되는 요청을 위한 no_timestamp를 제공해요.
  • sgcsign timestamp는 이미 Authenticode로 서명된 파일에 같은 대체 기능으로 타임스탬프를 추가해요.
timestamps
# sgcSignServer.conf.json
"timestamp": {
  "servers": ["http://timestamp.digicert.com", "http://timestamp.sectigo.com"],
  "timeout_ms": 30000
}

# 이미 서명된 파일에 타임스탬프 추가
sgcsign timestamp MyApp.exe --tsa http://timestamp.digicert.com --tsa http://timestamp.sectigo.com

백업, 모니터링 및 설치

암호화된 백업, 인증서 만료 전 경고, 사람의 조치가 필요할 때 보내는 이메일, Windows 설치 프로그램으로 서버를 오랫동안 안정적으로 운영하세요.

암호화된 예약 백업

하나의 아카이브에 설정, 데이터베이스, 마스터 키, 모든 키 및 인증서 파일이 담기며 암호문으로 AES-256-GCM 암호화돼요. 아카이브는 일정에 따라 또는 콘솔에서 실행하고, sgcSignServer --archive restore로 같은 컴퓨터에서 서버를 다시 구성하거나 새 컴퓨터로 옮길 수 있어요.

인증서 만료 모니터링

서명 인증서와 서버의 TLS 인증서를 시작할 때와 매일 확인해요. 만료 30일, 14일, 7일, 1일 전 경고가 대시보드에 표시되고 cert.expiring 웹훅, 이메일, sgcsign_certificate_not_after_seconds 메트릭으로 전달돼요.

이메일 알림

계정이 잠기거나, 2단계 인증 또는 비밀번호가 변경되거나, 백업이 실패하거나, 인증서가 곧 만료될 때 이메일을 보내요. STARTTLS 또는 암시적 TLS를 사용하는 SMTP를 지원하며, Windows에서는 메일 발송에 OpenSSL 라이브러리가 필요하지 않아요.

Windows 설치 프로그램

sgcSignServer_Setup.exe는 서버를 Windows 서비스로 설치하고, 첫 번째 관리자를 만들고, 방화벽 포트를 열어요. TLS는 생성된 자체 서명 인증서, 기존 PFX 파일을 사용하거나 테스트 컴퓨터에서는 일반 HTTP를 사용해요.

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

단일 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을 호출해요.

최고의 가성비: All-Access모든 eSeGeCe 제품과 프리미엄 지원이 포함되어 연 €1,059부터 이용할 수 있어요.
All-Access 가격 보기

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

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