
クライアントサイドのPKIツールボックス。X.509、CSR、チェーン、CRL、PKCS#7、PKCS#12のアーティファクトをデコードし、ASN.1を表示し、フォーマットを変換し、ブラウザ内で自己署名証明書を生成します。
PKI 成果物のためのセルフホスト型・100% クライアントサイドのツールボックス: X.509 証明書、PKCS#10 CSR、チェーン、CRL、PKCS#7 および PKCS#12 バンドル、生の ASN.1、フォーマット変換、フィンガープリント、証明書の発行。オンラインの証明書デコーダーに代わる、 プライバシーに配慮したセルフホスト可能な代替ツールです。
ライブデモ: https://pki-toolbox.youkyi.net (デモは以下でセルフホストできるのと同じ静的 ビルドです。貼り付けた内容がブラウザの外に出ることはありません)。
すべてのバイトは @peculiar/x509
と pkijs を使ってあなたのブラウザ内で解析されます。
何もアップロードされることはなく、バックエンドは静的ファイルを配信するだけです。これを
鵜呑みにする必要はありません。以下の 検証可能なプライバシー を参照してください。
| ツール | カテゴリ | 説明 |
|---|---|---|
| 証明書デコーダー | デコード | X.509 証明書のすべてのフィールド: サブジェクト、発行者、有効期間、SAN、キー用途、フィンガープリント |
| CSR デコーダー | デコード | PKCS#10 リクエストのサブジェクト、公開鍵、署名アルゴリズム、要求された拡張 |
| チェーンデコーダー | デコード | 連結された PEM バンドルを順序付きチェーンに分割し、すべての発行者からサブジェクトへのリンクを検証 |
| CRL デコーダー | デコード | 失効エントリ、日付、失効理由 |
| PKCS#7 デコーダー | デコード | PKCS#7 / CMS バンドルに含まれるすべての証明書 |
| PKCS#12 デコーダー | デコード | パスワードで保護された .p12 / .pfx ファイルを開く |
| フィンガープリント | 検査 | DER の SHA-1 / SHA-256 / SHA-512 |
| ASN.1 ビューア | 検査 | 任意の DER 成果物の展開可能なタグ/長さ/値ツリー |
| フォーマット変換 | 変換 | 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、sign.ts。src/routes/ 配下の各ルートは、それらを囲む薄い UI シェルです。@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 を参照してください。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 がサポート終了となっている場合も拒否されます。イメージはタグなしの候補としてプッシュされ、ダイジェストでスキャンされ、スキャン済みのそのダイジェストのみが昇格されるため、脆弱なイメージがバージョンタグを受け取ることはありません。ライセンスは別の非ブロッキングパスでスキャンされます。このプロジェクトは 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