
صندوق أدوات PKI من جانب العميل يقوم بفك ترميز عناصر X.509 و CSR و chain و CRL و PKCS#7 و PKCS#12، ويعرض ASN.1، ويحوّل الصيغ، ويولّد شهادات موقّعة ذاتيًا في المتصفح.
صندوق أدوات مستضاف ذاتيًا، يعمل بالكامل من جانب العميل لقطع PKI: شهادات X.509، وطلبات توقيع الشهادات PKCS#10، والسلاسل، وقوائم إبطال الشهادات CRLs، وحزم PKCS#7 وPKCS#12، وASN.1 الخام، وتحويل الصيغ، والبصمات، وإصدار الشهادات. بديل يحترم الخصوصية وقابل للاستضافة الذاتية عن أدوات فك ترميز الشهادات المتاحة على الإنترنت.
عرض حي: https://pki-toolbox.youkyi.net (العرض الحي هو نفس البناء الساكن الذي يمكنك استضافته ذاتيًا أدناه؛ لا شيء تلصقه يغادر متصفحك).
يتم تحليل كل بايت داخل متصفحك باستخدام @peculiar/x509
وpkijs. لا يتم رفع أي شيء
إطلاقًا، والخادم الخلفي يقدّم ملفات ساكنة فقط. لا يتعين عليك تصديق ذلك:
راجع الخصوصية القابلة للتحقق أدناه.
| الأداة | الفئة | الوصف |
|---|---|---|
| فاك ترميز الشهادات | فك الترميز | كل حقل في شهادة X.509: الموضوع، والمُصدر، والصلاحية، وSANs، واستخدام المفتاح، والبصمات |
| فاك ترميز CSR | فك الترميز | الموضوع، والمفتاح العام، وخوارزمية التوقيع، والامتدادات المطلوبة لطلب PKCS#10 |
| فاك ترميز السلسلة | فك الترميز | يقسّم حزمة PEM المتسلسلة إلى سلسلة مرتبة ويتحقق من كل رابط من المُصدر إلى الموضوع |
| فاك ترميز CRL | فك الترميز | الإدخالات المُبطلة، والتواريخ، وأسباب الإبطال |
| فاك ترميز PKCS#7 | فك الترميز | كل شهادة تحملها حزمة PKCS#7 / CMS |
| فاك ترميز PKCS#12 | فك الترميز | يفتح ملفات .p12 / .pfx المحمية بكلمة مرور |
| البصمات | الفحص | SHA-1 / SHA-256 / SHA-512 لـ DER |
| عارض ASN.1 | الفحص | شجرة وسم/طول/قيمة قابلة للتوسيع لأي قطعة DER |
| تحويل الصيغ | التحويل | PEM ↔ DER ↔ PKCS#7 |
| شهادة موقّعة ذاتيًا | التوليد | شهادة موقّعة ذاتيًا وزوج مفاتيح (RSA / EC / Ed25519) عبر WebCrypto |
| التوقيع من 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 مُحصّن بالكامل (نظام ملفات جذر
للقراءة فقط، وإسقاط القدرات، وحدود الذاكرة والمعالج)؛ استخدم ذلك الملف
مباشرةً بدلًا من هذا المثال المبسّط.
الصورة مبنية من nginx:alpine-slim، وتزن حوالي 25 ميغابايت، وتستمع على
المنفذ غير المميّز 8080 وتعمل كمستخدم غير جذر.
يتطلب Node 24 (الإصدار الذي تُبنى به الصورة وCI) وpnpm 11.
إصدار pnpm الدقيق مثبّت بواسطة حقل packageManager في package.json، لذا
يكفي 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 و. كل مسار تحت
هو غلاف واجهة رفيع حولها.<meta> مع connect-src 'none'؛ ويضيف 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 وحدود الموارد.يتبع هذا المشروع الإصدار الدلالي و
Conventional Commits. تُسجّل التغييرات
الملحوظة في CHANGELOG.md. قواعد المساهمة موجودة في
CONTRIBUTING.md.
CHANGELOG.md، أعد تسمية ترويسة ## [Unreleased]
إلى الإصدار الجديد مع تاريخ اليوم، مثل ## [1.2.3] - 2026-06-01، وأضف
## [Unreleased] فارغة جديدة فوقها، وحدّث مراجع الروابط في أسفل الملف."version" في package.json إلى نفس الرقم.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 السلسلة كاملة: الفحص، وبناء الصورة، وفحص الصورة، ودفع
vX.Y.Z إلى سجل GitLab وإلى المرايا العامة (ghcr.io، وDocker Hub)، ثم
إصدار GitLab تكون ملاحظاته هي قسم ## [X.Y.Z] المطابق المستخرج من
CHANGELOG.md (القسم الفارغ يفشل المهمة بدلًا من نشر ملاحظات فارغة).
يشغّل الدفع إلى main نفس خط الأنابيب ناقصًا خطوة الإصدار، وتعمل مهمة
الصورة فقط عندما يتغير ملف يؤثر على البناء، لذا لا يعيد دفع التوثيق أو
الإعدادات فقط بناء الصورة.
تُحافظ Renovate على تحديث التبعيات، والتي
توسّع الإعداد المسبق المشترك Renovate-Bot/renovate-config
(راجع renovate.json).
sign.tssrc/routes/@peculiar/x509 v2 يبني كائناته عبر tsyringe، الذي يحتاج إلى polyfill
لبيانات 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.trivy fs