
Caja de herramientas PKI del lado del cliente que decodifica artefactos X.509, CSR, cadena, CRL, PKCS#7 y PKCS#12, visualiza ASN.1, convierte formatos y genera certificados autofirmados en el navegador.
Una caja de herramientas autoalojada y 100 % del lado del cliente para artefactos PKI: certificados X.509, CSR PKCS#10, cadenas, CRL, paquetes PKCS#7 y PKCS#12, ASN.1 en bruto, conversión de formatos, huellas digitales y emisión de certificados. Una alternativa respetuosa con la privacidad y autoalojable a los decodificadores de certificados en línea.
Demo en vivo: https://pki-toolbox.youkyi.net (la demo es la misma compilación estática que puedes autoalojar a continuación; nada de lo que pegues sale de tu navegador).
Cada byte se analiza dentro de tu navegador con @peculiar/x509 y pkijs. Nunca se sube nada, el backend solo sirve archivos estáticos. No tienes que confiar en nuestra palabra: consulta Privacidad verificable más abajo.
| Herramienta | Categoría | Descripción |
|---|---|---|
| Decodificador de certificados | Decodificación | Todos los campos de un certificado X.509: sujeto, emisor, validez, SANs, uso de clave, huellas digitales |
| Decodificador de CSR | Decodificación | Sujeto, clave pública, algoritmo de firma y extensiones solicitadas de una petición PKCS#10 |
| Decodificador de cadena | Decodificación | Divide un paquete PEM concatenado en una cadena ordenada y verifica cada enlace emisor-a-sujeto |
| Decodificador de CRL | Decodificación | Entradas revocadas, fechas y motivos de revocación |
| Decodificador PKCS#7 | Decodificación | Cada certificado contenido en un paquete PKCS#7 / CMS |
| Decodificador PKCS#12 | Decodificación | Abre archivos .p12 / .pfx protegidos con contraseña |
| Huellas digitales | Inspección | SHA-1 / SHA-256 / SHA-512 del DER |
| Visor ASN.1 | Inspección | Árbol expandible de etiqueta/longitud/valor de cualquier artefacto DER |
| Conversión de formato | Conversión | PEM ↔ DER ↔ PKCS#7 |
| Certificado autofirmado | Generación | Certificado autofirmado y par de claves (RSA / EC / Ed25519) mediante WebCrypto |
| Firmar desde una CA | Generación | Emite un certificado desde una CA existente: nuevo par de claves o CSR, hoja o intermedio, con una cadena completa lista para usar |
El catálogo vive en un único registro (src/lib/tools.ts) que controla la barra de navegación y la cuadrícula de inicio.
Alrededor de las herramientas en sí:
src/lib/pki/detect.ts) y se abre en la herramienta que lo lee./ coloca el cursor en la entrada.La afirmación "nunca sale de tu navegador" es verificable desde dentro de la página:
connect-src de la propia página desde la política con la que fue servida, cuenta las peticiones capaces de sacar datos desde que pegaste, y ejecuta un intento en vivo que el navegador rechaza delante de ti, citando la directiva que lo bloqueó.Ejecuta siempre una etiqueta de versión fijada e inmutable (vX.Y.Z), nunca latest: una etiqueta móvil no puede auditarse ni revertirse. Para la garantía más fuerte, fija el digest de la imagen (...@sha256:...).
docker run -p 8080:8080 ghcr.io/youkyi/pki-toolbox:v2.2.0
Luego abre http://localhost:8080.
Cada versión se publica, bajo la misma etiqueta inmutable vX.Y.Z, en:
| Registro | Imagen |
|---|---|
| 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
El repositorio incluye un docker-compose.yml totalmente endurecido (sistema de archivos raíz de solo lectura, capacidades eliminadas, límites de memoria y CPU); usa ese archivo directamente en lugar de este ejemplo mínimo.
La imagen se construye a partir de nginx:alpine-slim, pesa unos 25 MB, escucha en el puerto no privilegiado 8080 y se ejecuta como usuario no root.
Requiere Node 24 (la versión con la que se construyen la imagen y CI) y pnpm 11. La versión exacta de pnpm está fijada por el campo packageManager de package.json, por lo que corepack enable es suficiente para obtenerla.
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