Skip to main content

NetBox plugin for TLS/SSL certificate management - Project Janus

Project description

NetBox SSL Plugin

Project Janus — Your Single Source of Truth for TLS/SSL certificate management in NetBox

PyPI Python CI License NetBox Stable

Named after Janus, the Roman god of doorways and transitions — because every certificate guards a doorway, and every renewal is a transition.


NetBox SSL Plugin — Certificate List, Analytics, Detail, Compliance, Map

✨ Why NetBox SSL?

Managing SSL certificates across your infrastructure shouldn't be a scavenger hunt. NetBox SSL brings visibility and control to your certificate lifecycle:

  • 🔍 See everything at a glance — Know which certificates are expiring, where they're deployed, and who owns them
  • 🔄 Painless renewals — The Janus workflow transfers all assignments automatically when you renew
  • 🔒 Security first — Private keys are never stored, only location hints for your secret management system
  • 🎯 Deep integration — Certificates link directly to NetBox Services, Devices, and VMs

Requirements

Dependency Version
NetBox 4.4.0 - 4.5.x
Python 3.10+

The plugin uses the Python cryptography library for X.509 certificate parsing (installed automatically as a dependency).

Installation

pip install netbox-ssl

Add to your configuration.py:

PLUGINS = ["netbox_ssl"]

Run migrations and restart NetBox:

python manage.py migrate netbox_ssl
sudo systemctl restart netbox netbox-rq

That's it! Navigate to Plugins > SSL Certificates in your NetBox.

📖 Full documentation: https://ctrl-alt-automate.github.io/netbox-ssl/

⚙️ Configuration

Customize the plugin via PLUGINS_CONFIG in your configuration.py:

PLUGINS_CONFIG = {
    "netbox_ssl": {
        "expiry_warning_days": 30,   # Days before expiry → Warning status
        "expiry_critical_days": 14,  # Days before expiry → Critical status
    },
}
Option Type Default Description
expiry_warning_days Integer 30 Certificates expiring within this many days show warning status
expiry_critical_days Integer 14 Certificates expiring within this many days show critical status
notification_email_enabled Boolean False Enable email notifications for expiry reports
notification_email_recipients List [] Default email recipients for notifications
bulk_import_max_batch_size Integer 100 Maximum certificates per bulk import request
expiry_scan_thresholds List [14, 30, 60, 90] Days-before-expiry thresholds for the expiry scan script
expiry_scan_cooldown_hours Integer 24 Minimum hours between duplicate event notifications

See Configuration for more options including custom fields, permissions, and webhooks.

📸 Screenshots

Analytics Dashboard
Analytics dashboard with expiry forecast
Certificate Detail
Certificate detail with tabbed layout
Compliance Report
Compliance report with score and trend
Certificate Map
Certificate map topology per tenant
Smart Import
Smart Paste import with X.509 parsing
Assignments
Track which certificates are assigned where

Features

Smart Paste Import

Just paste your PEM certificate — the plugin extracts everything automatically: Common Name, SANs, validity dates, issuer chain, fingerprints, and more.

Janus Renewal Workflow

When you import a renewed certificate (same CN as an existing one), the plugin offers to:

  • Preview assignments that will be transferred in a detailed table
  • Transfer all assignments from the old certificate atomically
  • Archive the old certificate with "Replaced" status
  • Link them together for audit trail

Start a renewal directly from the certificate detail page with the Renew button.

Certificate Authority Tracking

Track your CAs (Let's Encrypt, DigiCert, Sectigo, internal CAs) with automatic detection based on issuer patterns.

Certificate Signing Requests (CSR)

Track pending certificate requests through their lifecycle: Pending, Approved, Rejected, Issued.

Chain Validation

Validate certificate chains for completeness, signature correctness, and expiry.

Compliance Reporting

Define compliance policies (minimum key size, forbidden algorithms, max validity, etc.) and run checks across your certificate inventory. 10 built-in policy types with severity levels and scoring.

Data Export

Export certificates in CSV, JSON, YAML, or PEM bundle format with configurable field selection.

Bulk CSV/JSON Import

Import certificate metadata from CSV or JSON files — paste content or upload a file. Two-step workflow with preview and validation before creating certificates. Also available via API.

ACME Certificate Monitoring

Track Let's Encrypt and other ACME-issued certificates with auto-detection, renewal status, and provider metadata. Supports 7+ ACME providers.

Analytics Dashboard

Visual overview of your certificate landscape: status distribution, key algorithms, expiry forecast with contextual colors, CA distribution, and ACME coverage. Tenant-filterable with dark mode support.

Compliance Report

Score overview with progress indicator, failure breakdowns by severity and policy type, 90-day trend chart, and CSV/JSON export.

Certificate Map

Interactive topology view showing certificates per Tenant → Device/VM → Service, with color-coded expiry status and HTMX lazy loading for performance.

Email Notifications

Receive email alerts when certificates are expiring. Configurable recipients, thresholds, and subject prefix. Sends HTML + plain-text reports.

Certificate Assignments

Link certificates to the objects that use them:

  • Services (recommended) — Port-level granularity (e.g., HTTPS on port 443)
  • Devices — Physical servers and appliances
  • Virtual Machines — VMs in your virtualization clusters

Expiry Dashboard Widget

Add the widget to your NetBox dashboard to see:

  • 🔴 Critical — Expiring within 14 days
  • 🟠 Warning — Expiring within 30 days
  • Orphan — Certificates without assignments

Security by Design

  • No private key storage — Private keys never touch the database
  • Private key rejection — PEM input with private keys is blocked
  • Key location hints — Document where keys are stored (e.g., vault:secret/certs/example.com)

📊 Compatibility

NetBox Version Plugin Version Status
4.5.x 0.7.x ✅ Primary
4.4.x 0.7.x ✅ Supported
4.3.x and older ❌ Unsupported

📚 Documentation

Full documentation lives at ctrl-alt-automate.github.io/netbox-ssl — searchable, versioned, dark-mode enabled.

Offline copies of all pages also live in the docs/ folder:

🛠️ Development

# Clone and start development environment
git clone https://github.com/ctrl-alt-automate/netbox-ssl.git
cd netbox-ssl
docker compose up -d

# Access NetBox at http://localhost:8000
# Login: admin / admin

See CONTRIBUTING.md for more details.

🤝 Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch from dev
  3. Make your changes with tests
  4. Submit a pull request

📄 License

Apache License 2.0

🙏 Acknowledgments

  • The NetBox community for the excellent plugin framework
  • The cryptography library for robust X.509 parsing

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

netbox_ssl-1.0.0.tar.gz (244.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

netbox_ssl-1.0.0-py3-none-any.whl (206.3 kB view details)

Uploaded Python 3

File details

Details for the file netbox_ssl-1.0.0.tar.gz.

File metadata

  • Download URL: netbox_ssl-1.0.0.tar.gz
  • Upload date:
  • Size: 244.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for netbox_ssl-1.0.0.tar.gz
Algorithm Hash digest
SHA256 f5347df9316ea098f833464b723742b5806d6dfaa5eaee8b0caeed5b2464430a
MD5 fe83022f7ca8da7060837f42c378b70e
BLAKE2b-256 d42add6051007893dffe7c9dcf65e900452cef400a25cbd947a478182751f2ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for netbox_ssl-1.0.0.tar.gz:

Publisher: publish.yml on ctrl-alt-automate/netbox-ssl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file netbox_ssl-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: netbox_ssl-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 206.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for netbox_ssl-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8f1bd0890d273a2ea0e50e01249d8f2372c6125804ea0023d6cc5c314e60869e
MD5 9755bddd20cb10aa95b8c1f8e727098f
BLAKE2b-256 4e66a7419c5bd9a812a99b145924de23e92b47df705205503c470747307a8849

See more details on using hashes here.

Provenance

The following attestation bundles were made for netbox_ssl-1.0.0-py3-none-any.whl:

Publisher: publish.yml on ctrl-alt-automate/netbox-ssl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page