Skip to content
Skills Library
DevOps & cloud · Analysis

node-cert

/node-cert

Fix Node.js certificate trust issues behind corporate SSL-inspecting proxies. Use when discussing: VPN, corporate VPN, corporate proxy, SSL inspection, MITM proxy, TLS interception, NODE_EXTRA_CA_CERTS, self-signed certificate error, UNABLE_TO_VERIFY_LEAF_SIGNATURE, certificate chain, proxy CA, corporate network, Claude Code on VPN, Gemini CLI on VPN, npm behind proxy, Node.js certificate error, CAFile.pem, proxy-on, proxy-off, HTTPS_PROXY, HTTP_PROXY, openssl s_client, certificate extraction, corporate root CA, forward trust CA, trust store gap.

Licence
MIT
Last repository change
25.10.2026

Assessment and security

100/ 100Class: good
Format25 / 25
Frontmatter with name and description, valid name, description up to 1,024 characters, name matching the folder.
Discoverability25 / 25
Description explains when to use the skill, has a reasonable length and uses third person.
Content35 / 35
At least 150 words and at most 500 lines, headings, step lists, examples or code.
Hygiene15 / 15
No placeholders such as TODO, no Windows paths, with a licence.
Riskno signals detected in the scan
Files in this package
8
Scripts
0
HTML comments
0
URLs in SKILL.md
0
Deprecation

No signals detected. Repository changed on 25.10.2026, without references to retired models or APIs.

Licence

MIT, open: use and modify while retaining author attribution.

What it does and when to use it

Fix Node.js certificate trust issues behind corporate SSL-inspecting proxies. Use when discussing: VPN, corporate VPN, corporate proxy, SSL inspection, MITM proxy, TLS interception, NODE_EXTRA_CA_CERTS, self-signed certificate error, UNABLE_TO_VERIFY_LEAF_SIGNATURE, certificate chain, proxy CA, corporate network, Claude Code on VPN, Gemini CLI on VPN, npm behind proxy, Node.js certificate error, CAFile.pem, proxy-on, proxy-off, HTTPS_PROXY, HTTP_PROXY, openssl s_client, certificate extraction, corporate root CA, forward trust CA, trust store gap.

Original author description

Fix Node.js certificate trust issues behind corporate SSL-inspecting proxies. Use when discussing: VPN, corporate VPN, corporate proxy, SSL inspection, MITM proxy, TLS interception, NODE_EXTRA_CA_CERTS, self-signed certificate error, UNABLE_TO_VERIFY_LEAF_SIGNATURE, certificate chain, proxy CA, corporate network, Claude Code on VPN, Gemini CLI on VPN, npm behind proxy, Node.js certificate error, CAFile.pem, proxy-on, proxy-off, HTTPS_PROXY, HTTP_PROXY, openssl s_client, certificate extraction, corporate root CA, forward trust CA, trust store gap.

How it works

  1. The Core Problem
  2. Capabilities
  3. Reference Documentation
  4. Workflow
  5. Scripts
  6. Response Guidelines
  7. Examples
  8. Allowed Tools
Original SKILL.md headings · 188 lines, 917 words
SKILL.md preview
---
name: node-cert
description: >
  Fix Node.js certificate trust issues behind corporate SSL-inspecting proxies.
  Use when discussing: VPN, corporate VPN, corporate proxy, SSL inspection, MITM
  proxy, TLS interception, NODE_EXTRA_CA_CERTS, self-signed certificate error,
  UNABLE_TO_VERIFY_LEAF_SIGNATURE, certificate chain, proxy CA, corporate network,
  Claude Code on VPN, Gemini CLI on VPN, npm behind proxy, Node.js certificate
  error, CAFile.pem, proxy-on, proxy-off, HTTPS_PROXY, HTTP_PROXY, openssl s_client,
  certificate extraction, corporate root CA, forward trust CA, trust store gap.
allowed-tools:
  - Bash
  - Read
  - Write
  - WebSearch
---

# Node.js Certificate Trust Expert

Fix certificate errors when Node.js tools run behind corporate SSL-inspecting proxies (Zscaler, Palo Alto, Cisco Umbrella, etc.).

## The Core Problem

Corporate proxies perform SSL/TLS inspection by:

1. Intercepting HTTPS connections
2. Decrypting traffic with their own CA
3. Re-encrypting with a corporate certificate
4. Forwarding to the destination

Node.js uses its own bundled CA store, not the system trust store. When a corporate proxy re-signs certificates, Node.js sees an untrusted issuer and fails with errors like:

- `UNABLE_TO_VERIFY_LEAF_SIGNATURE`
- `SELF_SIGNED_CERT_IN_CHAIN`
- `unable to get local issuer certificate`
- `certificate has expired` (even for valid certs)

The fix: Extract the corporate root CA and tell Node.js to trust it via `NODE_EXTRA_CA_CERTS`.

## Capabilities

| Action | What It Does |
|--------|--------------|
| **Diagnose** | Full connectivity check (VPN, DNS, SSL, env vars, CA file, Node.js test) |
| **Extract cert** | Get corporate root CA from live TLS chain using openssl |
| **Verify config** | Check env vars and CA file are correctly configured |
| **Smoke test** | Test actual Node.js HTTPS connectivity |
| **Cert info** | Display certificate details (subject, issuer, expiry) |
| **Proxy env** | Output export statements for shell configuration |
| **Toggle setup** | Generate proxy-on/off/status functions for rc file |
| **Check inspection** | Detect if SSL inspection is currently active |
| **Cert bundle** | Combine system certs + corporate CA into one bundle |
| **Export fix** | Generate portable script for teammates |

## Reference Documentation

| Topic | Reference |
|-------|-----------|
| Why Node.js fails (deep dive) | [root-cause.md](references/root-cause.md) |
| Certificate extraction procedure | [cert-extraction.md](references/cert-extraction.md) |
| Proxy environment variables | [proxy-env-vars.md](references/proxy-env-vars.md) |
| Tool-specific fixes | [tool-specific-fixes.md](references/tool-specific-fixes.md) |
| macOS/Linux/Windows specifics | [platform-guide.md](references/platform-guide.md) |
| Error messages and decision tree | [troubleshooting.md](references/troubleshooting.md) |
| Certificate rotation and bundling | [ca-bundle-management.md](references/ca-bundle-management.md) |

## Workflow

### 1. Diagnose the Problem

When a user reports certificate errors:

1. **Confirm they're on VPN/corporate network** - "Are you connected to your company VPN?"
2. **Check for SSL inspection** - "Let me check if your traffic is being inspected"
3. **Run diagnostics** - Use `/node-cert:diagnose` or the diagnose script

### 2. Extract the Certificate

If SSL inspection is detected:

1. **Read** [cert-extraction.md](references/cert-extraction.md)
2. **Run extraction** - `/node-cert:extract-cert` or `scripts/extract-cert.sh`
3. **Verify the cert** - Check it's the root CA, not intermediate

### 3. Configure Environment

Set up the environment variables:

1. **Read** [proxy-env-vars.md](references/proxy-env-vars.md)
2. **Generate shell functions** - `/node-cert:proxy-toggle-setup`
3. **Add to shell rc file** - `.zshrc`, `.bashrc`, or `.bash_profile`

### 4. Test the Fix

Verify everything works:

1. **Run smoke test** - `/node-cert:smoke-test`
2. **Test specific tools** - Claude Code, npm, git, etc.

## Scripts

Portable scripts in `scripts/` that work without the plugin:

| Script | Purpose |
|--------|---------|
| `diagnose.sh` | Full diagnostic sweep |
| `extract-cert.sh` | Extract corporate root CA |
| `smoke-test.sh` | Test Node.js HTTPS connectivity |
| `cert-info.sh` | Display certificate details |

Run with: `bash scripts/<script>.sh`

## Response Guidelines

- **Always check references first** before answering questions
- **Show commands** - users should see exactly what will run
- **Explain the why** - not just the command, but why it works
- **Platform-aware** - macOS, Linux, and Windows have differences
- **No company-specific values** - use placeholders user can customize
- **Cite sources** - reference file or external URL

## Examples

### Example 1: User Reports Certificate Error

```
User: I'm getting "UNABLE_TO_VERIFY_LEAF_SIGNATURE" when running Claude Code on my corporate VPN

Skill: This error means Node.js doesn't trust the certificate it received. Corporate proxies
often re-sign TLS traffic with their own CA, which Node.js doesn't know about.

Let me check if SSL inspection is active and extract your corporate certificate.

[Runs /node-cert:diagnose]

I can see Zscaler is intercepting your traffic. The certificate chain shows:
- api.anthropic.com
- YourCompany Forward Trust CA (intermediate)
- YourCompany Root CA (root - this is what we need)

I'll extract the root CA now...

[Runs /node-cert:extract-cert]

Done! The certificate was saved to ~/CAFile.pem. Now configure your environment:

export NODE_EXTRA_CA_CERTS=~/CAFile.pem

To make this permanent and toggleable, I can generate shell functions for your rc file.
Want me to run /node-cert:proxy-toggle-setup?
```

### Example 2: Help Teammate

```
User: My colleague is having the same VPN cert issues. Can I give them a script?

Skill: Yes! I'll generate a portable fix script they can run.

[Runs /node-cert:export-fix]

Created: ~/fix-corporate-cert.sh

This script:
1. Extracts the corporate root CA from the live TLS chain
2. Saves it to ~/CAFile.pem
3. Outputs the export statement to add to their shell

They can run it with: bash fix-corporate-cert.sh

No dependencies required beyond openssl (comes with macOS/Linux).
```

### Example 3: Debug Why Fix Stopped Working

```
User: The VPN cert fix was working yesterday, but now Claude Code is failing again

Skill: This often happens when the corporate CA rotates. Let me check...

[Runs /node-cert:cert-info ~/CAFile.pem]

Your current CA file shows:
- Subject: YourCompany Root CA
- Expires: 2024-03-15 (EXPIRED!)

The corporate CA has rotated. I'll extract the new one:

[Runs /node-cert:extract-cert]

New certificate saved. It expires 2026-01-15. Claude Code should work now.

Tip: Some companies rotate certs quarterly. If this happens often, consider
adding a weekly cron job to re-extract the cert.
```

## Allowed Tools

This skill can use:
- `Read` - to read reference files
- `Bash` - to run diagnostic and extraction scripts
- `Write` - to generate shell config and export scripts
- `WebSearch` - to research tool-specific certificate configurations
Files in this package (8)
  • SKILL.md 7 KB
  • references/ca-bundle-management.md 6 KB
  • references/cert-extraction.md 5 KB
  • references/platform-guide.md 6 KB
  • references/proxy-env-vars.md 6 KB
  • references/root-cause.md 5 KB
  • references/tool-specific-fixes.md 5 KB
  • references/troubleshooting.md 7 KB

Versions

The database has no other skills named node-cert.

Database snapshot: 13.11.2026 · package version bb7a978314c6 (SHA-256 digest of the entire package)

Downloads in the last 30 days: 0 · ranking

Report a problem with this skill: harmful content, incorrect descriptions or an author’s removal request.

Similar skills

  • 90cert-check
    Check TLS certificate health for endpoints - expiry, chain verification, TLS version, cipher inspection, HTTP header validation. Use when user says "cert check", "certificate expiry".
  • 90network-diagnostics
    Diagnose and configure Claude Code network settings - HTTP/HTTPS proxy, NO_PROXY, custom CA certificates, TLS-inspection proxies, mTLS client certificates, firewall allowlists, and stream timeouts. Use this skill whenever the user mentions proxy, corporate network, VPN,…
  • 90certificate-monitoring
    Use when the user asks about SSL/TLS certificates, certificate expiration, monitoring domains for cert health, or issuing free Let's Encrypt certificates. Triggers include "is my cert expiring", "scan ssl on X", "check certificate", "monitor this domain", "issue a free cert",…
  • 100certificate-management
    Use when managing TLS certificates and PKI infrastructure — issuing, renewing, or rotating certificates, debugging TLS handshake failures, managing cert-manager in Kubernetes, operating an internal CA, creating CSRs, or checking certificate expiration. Also use for "certificate…
  • 98daytona-windows-cert
    test on Windows, enterprise CA, corporate certificate, GPO cert, TLS fetch failed, Windows sandbox, daytona windows, self-hosted cert. Use when validating OpenWork Windows enterprise TLS/OS-trust fixes in a Daytona Windows sandbox.
  • 98daytona-windows-cert
    test on Windows, enterprise CA, corporate certificate, GPO cert, TLS fetch failed, Windows sandbox, daytona windows, self-hosted cert. Use when validating iPolloWork Windows enterprise TLS/OS-trust fixes in a Daytona Windows sandbox.

Feedback and reports

Your message goes to Bartosz Sokoliński. An email address is needed only for a reply. See the privacy policy.