Terminal UI for SSL certificate creation, inspection, export, import, CSR generation, and local CA management.
- Requirements
- Installation
- TUI Functions
- Feature Screenshots
- Help Screen (
?) - Versioning and Releases
- Testing
- CI Badges
- Coverage Reporting
- 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
Use one of these options depending on how you want to consume releases.
Linux/macOS:
curl -LsSf https://astral.sh/uv/install.sh | shWindows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Alternative methods are available in the official uv docs.
uv tool install ssltRun:
ssltUpgrade later:
uv tool upgrade ssltuv 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.
pipx install ssltgit clone https://github.com/fivepoint-0/sslt.git
cd sslt
uv sync
uv run ssltSSLT home hotkeys:
n: New certificatel: List/inspect certificatese: Export currently selected certificatei: Import certificatec: Generate CSRa: Manage local CA?: Helpq: Quit
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.
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.
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.
Context: export flow for the selected certificate. Choose output format (PEM, DER, PKCS#12), destination path, optional filename override, and optional P12 password.
Context: import flow for bringing existing certificate files into SSLT management, with optional key file attachment and custom display label.
Context: CSR generation screen for external CA workflows. Configure subject and SAN fields, then generate a CSR + private key pair with F4.
Context: local root CA administration screen for creating a development CA, installing trust into the OS trust store, and deleting CA artifacts.
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.pyUse 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
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
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
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
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
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
Shows all keybindings and quick usage guidance in-app.
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.0This 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.
- 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 pytestCoverage 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