
クライアントサイドのPKIツールボックス。X.509、CSR、チェーン、CRL、PKCS#7、PKCS#12のアーティファクトをデコードし、ASN.1を表示し、フォーマットを変換し、ブラウザ内で自己署名証明書を生成します。
セルフホスト可能な、100%クライアントサイドで動作するPKI成果物向けツールボックス: X.509証明書、PKCS#10 CSR、チェーン、CRL、PKCS#7およびPKCS#12バンドル、生のASN.1、フォーマット変換、フィンガープリント、証明書発行。オンライン証明書デコーダーに代わる、プライバシーを尊重したセルフホスト可能な代替ツールです。
ライブデモ: https://pki-toolbox.youkyi.net (デモは以下でセルフホストできるものと同じ静的ビルドです。貼り付けた内容がブラウザから出ることはありません)。
すべてのバイトは@peculiar/x509とpkijsによってあなたのブラウザ内で解析されます。何もアップロードされることはなく、バックエンドは静的ファイルを配信するだけです。これを鵜呑みにする必要はありません。以下の検証可能なプライバシーをご覧ください。
| ツール | カテゴリ | 説明 |
|---|---|---|
| 証明書デコーダー | デコード | X.509証明書のすべてのフィールド: subject、issuer、有効期間、SAN、key usage、フィンガープリント |
| CSRデコーダー | デコード | PKCS#10リクエストのsubject、公開鍵、署名アルゴリズム、要求された拡張 |
| チェーンデコーダー | デコード | 連結されたPEMバンドルを順序付けられたチェーンに分割し、すべてのissuer-to-subjectリンクを検証 |
| CRLデコーダー | デコード | 失効エントリ、日付、失効理由 |
| PKCS#7デコーダー | デコード | PKCS#7 / CMSバンドルに含まれるすべての証明書 |
| PKCS#12デコーダー | デコード | パスワード保護された.p12 / .pfxファイルを開く |
| フィンガープリント | 検査 | DERのSHA-1 / SHA-256 / SHA-512 |
| ASN.1ビューア | 検査 | 任意のDER成果物の展開可能なtag/length/valueツリー |
| フォーマット変換 | 変換 | PEM ↔ DER ↔ PKCS#7 |
| 自己署名証明書 | 生成 | WebCryptoによる自己署名証明書と鍵ペア (RSA / EC / Ed25519) |
| CAからの署名 | 生成 | 既存のCAから証明書を発行: 新しい鍵ペアまたはCSR、リーフまたは中間、すぐに使えるfullchain付き |
カタログは単一のレジストリ(src/lib/tools.ts)にあり、ナビバーとホームグリッドを駆動します。
ツール自体に加えて:
src/lib/pki/detect.tsを参照)によって認識され、それを読み取るツールで開きます。/で入力欄にカーソルが移動します。「ブラウザから出ることはない」という主張は、ページ内から検証できます:
connect-srcディレクティブを読み戻し、貼り付けてからデータを持ち出せるリクエストを数え、ブラウザが拒否するライブ試行をあなたの目の前で実行し、それをブロックしたディレクティブを引用します。常に固定された不変のリリースタグ(vX.Y.Z)を実行し、latestは決して使わないでください: 動くタグは監査もロールバックもできません。最も強力な保証を得るには、イメージダイジェスト(...@sha256:...)を固定してください。
docker run -p 8080:8080 ghcr.io/youkyi/pki-toolbox:v2.2.0
その後、http://localhost:8080を開きます。
各リリースは、同じ不変のvX.Y.Zタグで以下に公開されます:
| レジストリ | イメージ |
|---|---|
| GitHub Container Registry | ghcr.io/youkyi/pki-toolbox |
| Docker Hub | youkyi/pki-toolbox |
docker pull ghcr.io/youkyi/pki-toolbox:v2.2.0 # or
docker pull youkyi/pki-toolbox:v2.2.0
services:
pki-toolbox:
image: ghcr.io/youkyi/pki-toolbox:v2.2.0
ports:
- '8080:8080'
restart: unless-stopped
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
read_only: true
docker compose up -d
リポジトリには完全に強化されたdocker-compose.yml(読み取り専用ルートファイルシステム、ドロップされたケイパビリティ、メモリとCPU制限)が同梱されています。この最小限の例ではなく、そのファイルを直接使用してください。
イメージはnginx:alpine-slimからビルドされ、約25 MBで、非特権ポート8080でリッスンし、非rootユーザーとして実行されます。
Node 24(イメージとCIがビルドに使用するバージョン)とpnpm 11が必要です。正確なpnpmバージョンはpackage.jsonのpackageManagerフィールドで固定されているため、corepack enableで十分です。
pnpm install
pnpm dev # dev server on http://localhost:5173
pnpm test # unit tests, single run (Vitest)
pnpm test:unit # the same tests, in watch mode
pnpm test:e2e # end-to-end tests (Playwright)
pnpm test:e2e:ui # the same, in the Playwright UI
pnpm check # svelte-check / TypeScript
pnpm lint # Prettier + ESLint
pnpm format # rewrite files with Prettier
pnpm build # static build into ./build
pnpm preview # serve ./build locally
docker build -t pki-toolbox .
docker run -p 8080:8080 pki-toolbox
adapter-staticでプレーンなHTML/JSにビルド: すべてのルートが事前レンダリングされ、本番環境にNodeランタイムはありません。src/lib/pki/以下の純粋でテスト可能な関数にあり、Svelteのインポートはありません: parse.ts、chain.ts、crl.ts、pkcs7.ts、pkcs12.ts、asn1.ts、convert.ts、format.ts、pem.ts、oids.ts、detect.ts、generate.ts、。以下の各ルートはそれらの薄いUIシェルです。connect-src 'none'を含む<meta>タグとして出力されます。nginxはframe-ancestors 'none'、X-Frame-Options、X-Content-Type-Options、Referrer-Policy: no-referrer、制限的なPermissions-Policy、クロスオリジン分離ヘッダーを追加します。Vercelデモも同じヘッダーセットを送信します(vercel.jsonを参照)。docker-compose.ymlは読み取り専用ルートファイルシステム、cap_drop: ALL、no-new-privileges、リソース制限を追加します。trivy fs)と新しくビルドされたイメージの両方でチェックされます。ベースOSがEOLの場合も拒否されるため、脆弱なイメージがプッシュされることはありません。ライセンスは別の非ブロッキングパスでスキャンされます。このプロジェクトはSemantic VersioningとConventional Commitsに従います。注目すべき変更はCHANGELOG.mdに記録されます。コントリビューションのルールはCONTRIBUTING.mdにあります。
CHANGELOG.mdで、## [Unreleased]見出しを今日の日付の新しいバージョンに名前変更します(例: ## [1.2.3] - 2026-06-01)。その上に新しい空の## [Unreleased]を追加し、ファイル末尾のリンク参照を更新します。package.jsonの"version"を同じ番号にバンプします。mainにコミットし(慣習的なコミット、例: chore(release): 1.2.3)、プッシュします。git tag -a v1.2.3 -m "pki-toolbox v1.2.3"
git push origin v1.2.3
Lint、ユニットテスト、エンドツーエンドテストはすべてのプッシュで実行されます。スキャン、ビルド、リリースの各ステージは、共有のYouKyi-Infra/ci-infrastructure/ci-catalogコンポーネント(trivy-scan、docker-build、gitlab-release)から取得され、.gitlab-ci.ymlでバージョンによって固定されています。
vX.Y.Zタグはチェーン全体を実行します: スキャン、イメージビルド、イメージスキャン、GitLabレジストリと公開ミラー(ghcr.io、Docker Hub)へのvX.Y.Zのプッシュ、そしてノートがCHANGELOG.mdから抽出された一致する## [X.Y.Z]セクションであるGitLab Release(空のセクションは空のノートを公開するのではなくジョブを失敗させます)。
mainへのプッシュはリリースステップを除いた同じパイプラインを実行し、イメージジョブはビルドに影響するファイルが変更された場合にのみ実行されるため、ドキュメントや設定のみのプッシュはイメージを再ビルドしません。
依存関係はRenovateによって最新に保たれ、共有のRenovate-Bot/renovate-configプリセットを拡張します(renovate.jsonを参照)。
sign.tssrc/routes/@peculiar/x509 v2はtsyringeを通じてオブジェクトを構築し、コンシューマ側でReflectメタデータポリフィルが必要なため、このライブラリを使用するすべてのモジュールで@abraham/reflectionがそれより前にインポートされます。pkijsを経由し、そのWeb Cryptoエンジンはsrc/lib/pki/engine.tsで一度だけ登録されます。tests/pki/(Vitest)に、ブラウザテストはe2e/(Playwright)にあります。フィクスチャは実際の公開ルート(ISRG Root X1/X2)と生成されたECチェーンおよびCSRです。scripts/generate-fixtures.mjsを参照してください。