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
Named after Janus, the Roman god of doorways and transitions โ because every certificate guards a doorway, and every renewal is a transition.
โจ 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
๐ Quick Start
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: docs/
โ๏ธ 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 |
See Configuration for more options including custom fields, permissions, and webhooks.
๐ธ Screenshots
|
Certificate details with validity and assignments |
Smart Paste import with automatic X.509 parsing |
|
Dashboard widget showing certificate health |
Track which certificates are assigned where |
๐ฏ Key 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:
- Transfer all assignments from the old certificate
- Archive the old certificate with "Replaced" status
- Link them together for audit trail
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.1.x | โ Primary |
| 4.4.x | 0.1.x | โ Supported |
| 4.3.x and older | โ | โ Unsupported |
๐ Documentation
Full documentation is available in the docs/ folder:
- Installation โ Get up and running
- Configuration โ Customize expiry thresholds and more
- Usage Guide โ Learn the workflows
- API Reference โ REST API and GraphQL
- Data Models โ Database schema details
- Contributing โ Contribution guidelines
๐ ๏ธ 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:
- Fork the repository
- Create a feature branch from
dev - Make your changes with tests
- Submit a pull request
๐ License
Apache License 2.0
๐ Acknowledgments
- The NetBox community for the excellent plugin framework
- The
cryptographylibrary for robust X.509 parsing
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file netbox_ssl-0.1.0.tar.gz.
File metadata
- Download URL: netbox_ssl-0.1.0.tar.gz
- Upload date:
- Size: 44.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07851d86fd43b614738e59888ddcde3bfa378cb887f2cdbb86665748e07553a6
|
|
| MD5 |
a5006b5557752cc046ba3984af9b441b
|
|
| BLAKE2b-256 |
9fda605461bf96e7fa6b2dfbff97863a915af4c2e36256f166962f643d7e42c4
|
Provenance
The following attestation bundles were made for netbox_ssl-0.1.0.tar.gz:
Publisher:
publish.yml on ctrl-alt-automate/netbox-ssl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
netbox_ssl-0.1.0.tar.gz -
Subject digest:
07851d86fd43b614738e59888ddcde3bfa378cb887f2cdbb86665748e07553a6 - Sigstore transparency entry: 834798027
- Sigstore integration time:
-
Permalink:
ctrl-alt-automate/netbox-ssl@64d801c4c9db8bb191c99ce2e756effd845563a0 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ctrl-alt-automate
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@64d801c4c9db8bb191c99ce2e756effd845563a0 -
Trigger Event:
release
-
Statement type:
File details
Details for the file netbox_ssl-0.1.0-py3-none-any.whl.
File metadata
- Download URL: netbox_ssl-0.1.0-py3-none-any.whl
- Upload date:
- Size: 40.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ab460aa2f9a34452780c6c0d46dd1682120a71411f2fa151b4d929400c6d019
|
|
| MD5 |
b6c817b99f80ba95b225542c0b1a1903
|
|
| BLAKE2b-256 |
4da311a170d89671940409b300902bbd4c55db8e522814b5fcc5933a56dfa68e
|
Provenance
The following attestation bundles were made for netbox_ssl-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on ctrl-alt-automate/netbox-ssl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
netbox_ssl-0.1.0-py3-none-any.whl -
Subject digest:
2ab460aa2f9a34452780c6c0d46dd1682120a71411f2fa151b4d929400c6d019 - Sigstore transparency entry: 834798030
- Sigstore integration time:
-
Permalink:
ctrl-alt-automate/netbox-ssl@64d801c4c9db8bb191c99ce2e756effd845563a0 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ctrl-alt-automate
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@64d801c4c9db8bb191c99ce2e756effd845563a0 -
Trigger Event:
release
-
Statement type: