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/.p12file 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
Languages
TypeScript
92.7%
CSS
4.3%
HTML
1.2%
Dockerfile
1.1%
JavaScript
0.7%