Terminal UI for SSL certificate creation, inspection, export, import, CSR generation, and local CA management.
Project description
SSLT
Terminal UI for SSL certificate creation, inspection, export, import, CSR generation, and local CA management.
Table of Contents
- Requirements
- Installation
- TUI Functions
- Feature Screenshots
- Help Screen (
?) - Versioning and Releases
- Testing
- CI Badges
- Coverage Reporting
Requirements
- Python
3.12+ - OpenSSL installed and available on
PATH- Linux: usually
opensslpackage - macOS: system OpenSSL-compatible binary or Homebrew OpenSSL
- Windows: OpenSSL installation with
openssl.exeonPATH
- Linux: usually
- Optional (recommended):
uvfor fast install/run workflows
Installation
Use one of these options depending on how you want to consume releases.
Install uv (recommended)
Linux/macOS:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Alternative methods are available in the official uv docs.
Install SSLT from published releases
Option A: PyPI release (recommended once published)
uv tool install sslt
Run:
sslt
Upgrade later:
uv tool upgrade sslt
Option B: Install a specific release tag from GitHub
uv tool install "git+https://github.com/fivepoint-0/sslt@v0.1.0"
This is useful when you want to pin to an exact release tag.
Option C: pipx (isolated CLI install)
pipx install sslt
Developer/local install
git clone https://github.com/fivepoint-0/sslt.git
cd sslt
uv sync
uv run sslt
TUI Functions
SSLT home hotkeys:
n: New certificatel: List/inspect certificatese: Export currently selected certificatei: Import certificatec: Generate CSRa: Manage local CA?: Helpq: Quit
Feature Screenshots
Home hub
Context: landing page after launch. This is the command center where you can open each workflow (n, l, e, i, c, a, ?) and see which certificate is currently selected for export.
Create Certificate (n)
Context: certificate creation form with subject details, key size, SANs, validity window, and signing mode (auto, self_signed, local_ca). Use Ctrl+S to generate and F2 to save defaults.
List / Inspect Certificates (l)
Context: list and details view for managed certificates. Selecting an item displays issuer/subject, validity, SANs, fingerprints, and supports quick actions like export or delete.
Export Certificate (e)
Context: export flow for the selected certificate. Choose output format (PEM, DER, PKCS#12), destination path, optional filename override, and optional P12 password.
Import Certificate (i)
Context: import flow for bringing existing certificate files into SSLT management, with optional key file attachment and custom display label.
Generate CSR (c)
Context: CSR generation screen for external CA workflows. Configure subject and SAN fields, then generate a CSR + private key pair with F4.
Local CA Management (a)
Context: local root CA administration screen for creating a development CA, installing trust into the OS trust store, and deleting CA artifacts.
Help Modal (?)
Context: in-app keybinding and workflow reference for quick navigation without leaving the terminal UI.
To regenerate these images:
uv run python scripts/generate_docs_screenshots.py
1) Create Certificate (n)
Use this screen to:
- Create RSA certificates with key size
2048or4096 - Set validity period (days)
- Choose signing mode:
auto: local CA if present, else self-signedself_signed: always self-signedlocal_ca: requires existing local CA
- Set subject fields (
O,OU,L,ST,C) - Add DNS SANs (comma-separated)
- Save current form fields as profile defaults
Create screen hotkeys:
Ctrl+S: create certificateF2: save current fields as defaultsq: back
2) List / Inspect Certificates (l)
Use this screen to:
- View all locally managed certificates
- Select a certificate and inspect metadata:
- subject, issuer, serial
- key size and signature algorithm
- validity period and expiry status
- SANs
- SHA1/SHA256 fingerprints
- Choose a certificate as the active selection used by home-screen export
- Delete a certificate (with confirmation)
Details screen hotkeys:
Enter: return selected certificatee: open export for selected certificatex: delete selected certificate (confirmation required)r: refresh listq: back
Delete confirmation hotkeys:
y: confirm deleten/q: cancel
3) Export Certificate (e)
Use this screen to:
- Export selected certificate as:
PEMDERPKCS#12 (.p12)
- Choose destination directory
- Provide optional output filename
- Set optional PKCS#12 password
Export screen hotkeys:
Ctrl+S: exportq: back
4) Import Certificate (i)
Use this screen to:
- Import existing certificate files (
.pem/.crt/.cer/.der) - Optionally import matching private key file
- Optionally override display name/label
Import screen hotkeys:
F3: importq: back
5) Generate CSR (c)
Use this screen to:
- Generate a CSR + private key pair
- Select RSA key size (
2048or4096) - Set subject fields (
O,OU,L,ST,C) - Add DNS SANs (comma-separated)
CSR screen hotkeys:
F4: generate CSRq: back
6) Local CA Management (a)
Use this screen to:
- Create a local root CA certificate/key pair
- Install local CA trust into OS trust store
- Delete local CA artifacts
- View diagnostics:
- local CA presence status
- detected trust backend
Trust backend support:
- Linux:
update-ca-certificates,update-ca-trust, ortrust(p11-kit) - macOS:
security(System keychain) - Windows:
certutil(Root store)
Local CA screen hotkeys:
F5: create local CAF6: install CA trustF7: delete local CAq: back
Help Screen (?)
Shows all keybindings and quick usage guidance in-app.
Versioning and Releases
SSLT uses dynamic versioning from Git tags via hatch-vcs.
- Do not manually edit package version in
pyproject.toml. - Development builds derive versions from commit history (for example,
0.1.devN+g<sha>). - Release versions come from Git tags in the form
vX.Y.Z(for example,v1.2.3).
Release checklist:
- Ensure
mainis green (tests and coverage passing). - Create and push a release tag (helper command):
make release VERSION=0.1.0
This helper validates:
- semantic version format
- clean git working tree
- no existing local/remote tag collision
Equivalent manual commands:
git tag v0.1.0
git push origin v0.1.0
- GitHub Actions
Releaseworkflow will:- run tests on Ubuntu/macOS/Windows
- run coverage
- validate tag format
- build distributions
- publish to PyPI using
PYPI_PUBLISH_TOKEN - create a GitHub Release with distribution artifacts
If a version is already on PyPI, publish will fail. In that case, create the next tag version and re-run release.
Testing
- Unit/integration-style service tests:
tests/test_cert_manager.pytests/test_store.py
- Textual interaction tests:
tests/test_tui_flows.py
- Run tests:
uv run pytest
CI Badges
Coverage Reporting
Coverage is generated by .github/workflows/coverage.yml and published in two places:
- GitHub Actions step summary (
Coverage Report) - Workflow artifact named
coverage-reportcontaining:coverage.xmlcoverage.md
- Generated badge file in workflow artifacts at
.github/badges/coverage.svg - Badge timestamp file in workflow artifacts at
.github/badges/coverage-updated.txt
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 sslt-0.1.2.tar.gz.
File metadata
- Download URL: sslt-0.1.2.tar.gz
- Upload date:
- Size: 81.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c99d63daf30a12c3eb6f23c6c1cc7668a2537d7491871172c6a6667cbfd797fa
|
|
| MD5 |
ad2698f4877828c1c494e69ab715e118
|
|
| BLAKE2b-256 |
616daeae402c26f375613386ef9f142798b79594f0dadb61b9c2ccdb0476a199
|
File details
Details for the file sslt-0.1.2-py3-none-any.whl.
File metadata
- Download URL: sslt-0.1.2-py3-none-any.whl
- Upload date:
- Size: 37.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9d356f6836f9722c78056dc14245d530c19e9e68e85a6a7db7ed61980e0b0f6
|
|
| MD5 |
cc24e6fca23e25a24d86fe43b7389e2e
|
|
| BLAKE2b-256 |
4555fbf1f90b45597cce4716e1a0ac1d9d55ae9cb3381951f479c5f5f993fc23
|