sgcSign Server
sgcSign エンジンを REST API、Bootstrap ウェブ管理コンソール、CI/CD パイプライン向けのコマンドラインクライアントの背後に配置したセルフホスト型リモートコード署名デーモンです。
sgcSign エンジンを REST API、Bootstrap ウェブ管理コンソール、CI/CD パイプライン向けのコマンドラインクライアントの背後に配置したセルフホスト型リモートコード署名デーモンです。
Windows または Linux の単一ホストがビルドエージェント、開発者、CI パイプラインからの署名リクエストを受け付けます — 完全な監査、承認、メトリクスが組み込まれています。
署名、検証、ヘルス、メトリクス、承認ワークフロー向けの TLS セキュア /api/v1 エンドポイント。ビルドエージェントと SDK 向けの安定したマシンフレンドリーなコントラクトです。
ユーザー、API キー、プロバイダー、プロジェクト、監査、承認、Webhook、メトリクス向けの Bootstrap ベースの /admin UI。オペレーターが JSON を編集する必要はありません。
Inno Setup ウィザードまたは zip ドロップ。デーモンは自身を Windows サービスとして登録し、TLS を自身で終端処理して、セキュアなホストでアンアテンデド実行します。
各プロジェクトでは、プロバイダー、APIキー、監査ログの閲覧範囲、承認キューの一部を分離できます。複数のチームが1台のサーバーを共有しても、互いの署名用マテリアルが見えることはありません。
同じ API キーでリクエストし、管理者またはプロジェクト管理者が承認または却下し、その後にのみバイトが署名されます。SHA-256 ハッシュとファイルサイズがリクエストにロックされます。
すべてのアクション — 署名、検証、ログイン、承認、Webhook 起動 — がハッシュチェーン監査ログに追記されます。改ざんは検出可能で、SIEM スクレイピングも簡単です。
署名/検証/承認カウンター、署名レイテンシヒストグラム、プロバイダー可用性ゲージ。追加データベースなしの Prometheus 0.0.4 テキスト形式で直接公開します。
21 のライフサイクルイベントが X-Sgcsign-Signature: sha256=… とともに配信されます。3 回のリトライキューにより SIEM、チャット、チケットシステムが同期を維持します。
ライブラリに付属している同じエンジンを REST API 経由で公開します。すべての国プロファイル、すべての署名レベルに対応しています。
VeriFactu、FatturaPA、Facturae、KSeF、e-Factura、Peppol、myDATA および EU 雇用契約向けの XML 署名。POST /api/v1/sign/xades。
元のコンテンツを保持する増分更新を使用した PAdES-Basic PDF 署名。表示または非表示の署名。POST /api/v1/sign/pades。
任意のバイナリデータ向けの CMS / PKCS#7 デタッチまたはアタッチ署名。タイムスタンプ + 長期検証。POST /api/v1/sign/cades。
サーバーが保持するキーで登録済みの売上を構築して署名し、必要に応じて税務当局に送信して応答を返します。チェーン店の複数のレジで 1 つの納税者証明書を共有できます。POST /api/v1/sign/eet。
署名デーモンは設定した証明書ソース(Windows ストア、PFX、PKCS#11 ハードウェアトークン、Azure Trusted Signing、AWS KMS、Google KMS)と通信します。
.exe、.dll、.msi、.cab、.cat、.ocx、.sys に署名します。ハッシュのみモードにより、低帯域幅のランナーが数十バイトを 8 KB の PKCS#7 ブロブと交換できます。--page-hashes(API では page_hashes)を追加すると、signtool /ph と同様にカーネルモードドライバーにページハッシュを付けられます。
ClickOnce マニフェスト(.application / .manifest)に署名して、Windows クライアントが信頼プロンプトなしにインストールできるようにします。POST /api/v1/sign/clickonce。
.nupkg パッケージに署名して NuGet クライアントが発行者の身元を検証できるようにします。作成者とリポジトリの署名をサポートしています。POST /api/v1/sign/nuget。
Visual Studio 拡張機能パッケージに署名して VS Marketplace と IDE が信頼済みとして受け入れるようにします。POST /api/v1/sign/vsix。
管理コンソールのサインインを強化し、ディスク上のシークレットを暗号化します。パスワードが盗まれたり、設定ファイルがコピーされたりしても、署名キーは開かれません。
コンソールアカウントでは、任意の TOTP 認証アプリが生成する 6 桁のコードを追加し、スマートフォンを紛失した場合に備えて 10 個の使い捨てリカバリーコードを用意します。admin.require_2fa を設定すると、すべてのコンソールユーザーは他のページに進む前に登録を完了する必要があります。紛失した第 2 要素は管理者がリセットできます。
PKCE を使った認可コードフローで、Microsoft Entra ID、Okta、Keycloak、Google、または標準的な OpenID Connect プロバイダーからコンソールにサインインできます。ユーザーは外部 ID を自分のアカウントにリンクでき、新規ユーザーは管理者が承認するアカウントを任意で申請できます。
すべてのレスポンスにセキュリティヘッダーと厳格なコンテンツセキュリティポリシーが付きます。パスワードポリシーは設定可能で、一時パスワードは初回サインイン時に変更が必要です。また、ロールや権限が変わるとセッションはただちに終了します。
プロバイダーのパスワード、PIN、クラウド認証情報、Webhook シークレットは、マシンに紐付いたマスターキー(Windows では DPAPI)のもとで AES-256-GCM により暗号化して保存されます。sgcSignServer --protect-secrets は既存の設定をその場で暗号化します。
サーバーは、誰が、どのキーで、誰の承認を得たうえで署名できるかを決定します。1 台のタイムスタンプサーバーが停止していても、すべての署名にタイムスタンプが付きます。
プロバイダーまたはプロジェクト全体を承認必須にすると、サーバーは approval_required を返して直接署名を拒否します。承認 1 件につき署名は 1 回のみです。このルールは、signtool /dlib 向けの生ダイジェスト署名を含め、すべての署名経路で適用されます。
キーを再生成しても、古いシークレットは最大 7 日間有効なままです。有効期限の編集、所有者の確認、許可するプロバイダーの一覧による制限も行えます。api_keys.self_service を使うと、オペレーターは設定した制限の範囲内で自分のキーを作成、管理できます。 キーは初回利用時から有効期間を開始させることもできます。最初の認証済み呼び出しから N 日間有効で、「有効化期限」の日付が必須のため、未使用のキーが無期限に有効なまま残ることはありません。サブキーは親キーが有効化されてから初めて動作し、有効化は監査ログに apikey.activate として記録され、Community エディションでは両方の値が 30 日に制限されます。
サーバーはトークンごとに誤った PIN の結果を数え、max_pin_attempts に達するとログインを停止します。そのため、設定内の誤った PIN によってハードウェアトークンがロックされることはありません。最後の試行は allow_final_pin_try を指定した場合にのみ使われ、管理者はコンソールからガードをリセットできます。
sgcsign config はサーバー、プロバイダーなどの設定を名前付きプロファイルに保存し、sgcsign auth set-key は API キーを保存します。ビルドスクリプトで毎回指定する必要がなくなります。Delphi CLI と .NET ツール esegece.sgcsign.cli は同じファイルを共有します。
tsa_urls 一覧と、タイムスタンプを付けてはならないリクエスト向けの no_timestamp。
sgcsign timestamp は、すでに Authenticode 署名済みのファイルに、同じフォールバックでタイムスタンプを追加します。
# 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 インストーラーを備えています。
1 つのアーカイブに、設定、データベース、マスターキー、およびすべてのキーと証明書ファイルが含まれ、パスフレーズのもとで AES-256-GCM により暗号化されます。アーカイブはスケジュールまたはコンソールから実行でき、sgcSignServer --archive restore は同じマシン上でサーバーを再構築するか、新しいマシンへ移行します。
署名証明書とサーバーの TLS 証明書は、起動時と毎日チェックされます。残り 30 日、14 日、7 日、1 日の警告はダッシュボードに表示され、cert.expiring Webhook、メール、sgcsign_certificate_not_after_seconds メトリクスとして送信されます。
アカウントがロックアウトされたとき、2 要素認証やパスワードが変更されたとき、バックアップが失敗したとき、証明書の期限が近づいたときにメールが届きます。SMTP は STARTTLS または暗黙的 TLS に対応し、Windows ではメーラーに OpenSSL ライブラリは不要です。
sgcSignServer_Setup.exe は、サーバーを Windows サービスとしてインストールし、最初の管理者を作成して、ファイアウォールのポートを開きます。TLS には、生成される自己署名証明書、既存の PFX ファイル、またはテストマシン向けのプレーン HTTP を使用できます。
単一の Windows サービスが TLS を終端処理し、/api/v1 + /admin を公開し、すべての呼び出しで設定されたキープロバイダーにアクセスします。キーマテリアルはデータベースに保存されません。
/api/v1 にアクセスします。
/admin にログインします。Bootstrap UI、セッション Cookie、ロールベースアクセスを使用します。
+----------------------------+
| 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 はすべて同じ形式を使用します。
X-API-Key または Authorization: Bearer — どちらの認証方法も使用できます。
X-Project でテナントを選択します。キーはプロジェクトに対して認可されている必要があります。
X-Sgcsign-Signer-Subject + X-Sgcsign-Duration-Ms が含まれます。
# 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 分以内。
バンドルされた Inno Setup ウィザードを実行するか、zip をフォルダーにドロップします。デーモンは sgcSignServer という名前の Windows サービスとして自身を登録します。:8443 にバインドして TLS 証明書を読み込みます。
sgcSignServer.conf.json にプロバイダーを追加します — PFX ファイル、Azure Trusted Signing アカウント、AWS KMS キー、Certum SimplySign ユーザー、またはその他 10 種類のキープロバイダーのいずれか。サービスの再起動は不要です。
/admin/apikeys を開き、新しい API キーをクリックしてプロジェクトにスコープし、トークンを CI ランナーのシークレットにコピーします。ビルドエージェントが POST /api/v1/sign を呼び出します。