CertTools — SSL Certificate Toolkit

Web service for SSL/TLS certificate processing: decode PFX, analyze PEM certificates, verify certificate chains, match keys to certificates, and decode CSRs.

Features

  • PFX/PKCS#12 Decoder — Upload a .pfx / .p12 file with password to extract the full certificate chain and private key
  • Certificate Decoder — Paste PEM to view subject, issuer, validity, SANs, fingerprints, key usage, and more
  • Key Matcher — Verify that a private key matches a certificate (RSA modulus comparison)
  • CSR Decoder — Decode Certificate Signing Requests with signature verification
  • Chain Verifier — Validate certificate chain order and trust links

Tech Stack

  • Backend: Node.js, Express, TypeScript, node-forge
  • Frontend: React, TypeScript, Vite, Tailwind CSS
  • Icons: Lucide React

Quick Start (Development)

# Install all dependencies
npm run install:all
npm install

# Start both server and client in dev mode
npm run dev

Server runs on http://localhost:3001, client on http://localhost:5173 (with API proxy).

Production Build & Deployment

# 1. Install dependencies
cd server && npm install --production
cd ../client && npm install && npm run build
cd ..

# 2. Start production server
cd server
NODE_ENV=production PORT=3001 node -e "require('tsx/cjs'); require('./src/index.ts')"

# Or build server first:
cd server && npx tsc && NODE_ENV=production PORT=3001 node dist/index.js

In production the Express server serves the built frontend from client/dist/.

Environment Variables

Variable Default Description
PORT 3001 Server port
NODE_ENV Set to production to serve static frontend

Reverse Proxy (nginx)

server {
    listen 443 ssl;
    server_name certs.example.com;

    ssl_certificate     /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 10m;
    }
}

Project Structure

cert-tools/
├── server/                  # Express API
│   └── src/
│       ├── index.ts         # Server entry point
│       ├── routes/
│       │   └── certificates.ts  # API endpoints
│       └── services/
│           └── certService.ts   # Certificate processing logic
├── client/                  # React frontend
│   └── src/
│       ├── App.tsx          # Main app with tool navigation
│       ├── api.ts           # API client
│       ├── types.ts         # Shared TypeScript types
│       └── components/
│           ├── Header.tsx
│           ├── FileUpload.tsx
│           ├── CopyButton.tsx
│           ├── CertificateInfo.tsx
│           ├── PfxDecoder.tsx
│           ├── PemDecoder.tsx
│           ├── KeyMatcher.tsx
│           ├── CsrDecoder.tsx
│           └── ChainVerifier.tsx
└── package.json             # Root scripts

API Endpoints

Method Path Description
POST /api/decode/pfx Decode PFX file (multipart: file + password)
POST /api/decode/pem Decode PEM certificate(s) (JSON: { pem })
POST /api/decode/csr Decode CSR (JSON: { pem })
POST /api/match Match cert & key (JSON: { certificate, privateKey })
POST /api/chain/verify Verify cert chain (JSON: { pem })
Description
SSL Certificate Toolkit - decode PFX, analyze PEM, verify chains, match keys
Readme 93 KiB
Languages
TypeScript 92.7%
CSS 4.3%
HTML 1.2%
Dockerfile 1.1%
JavaScript 0.7%