Skip to main content

A robust, user-friendly Python CLI tool for inspecting SSL/TLS certificates of remote servers.

Project description

Python Version License Tests Coverage PyPI version Downloads

ssl-checkup

A robust, modular Python CLI tool for inspecting SSL/TLS certificates of remote servers. Features comprehensive testing, clean architecture, colorized output, and detailed debugging capabilities.

Features

  • Certificate Analysis: Check SSL certificate validity, issuer, subject, and SANs for any host
  • Colorized Output: Beautiful, readable output with --no-color option for plain text
  • Debug Mode: Comprehensive troubleshooting with --debug flag
  • Flexible Output: Print PEM certificate, issuer, subject, or SANs only as needed
  • Error Handling: Graceful handling of DNS/socket errors with helpful messages
  • Modular Architecture: Clean, testable code structure with 95% test coverage
  • Easy Installation: Available on PyPI - install with pipx install ssl-checkup

Installation

For Users (Recommended)

Install with pipx for best isolation and to avoid dependency conflicts:

pipx install ssl-checkup

If you don't have pipx, install it first:

# On macOS with Homebrew
brew install pipx

# On Ubuntu/Debian
sudo apt install pipx

# Or with pip
pip install --user pipx
pipx ensurepath

Alternative: Install with pip (may cause dependency conflicts):

pip install ssl-checkup
# Optional enhanced parsing and colors
pip install "ssl-checkup[full]"

After installation, run from anywhere:

ssl-checkup example.com

For Development

Clone and set up development environment:

git clone https://github.com/BaDxKaRMa/ssl-checkup.git
cd ssl-checkup

# Using uv (recommended)
uv sync
uv run ssl-checkup example.com

# Or using pip
pip install -e ".[dev,test,full]"
python -m ssl_checkup.main example.com

Usage

ssl-checkup [OPTIONS] WEBSITE[:PORT]

Arguments:

  • WEBSITE - Domain or IP address to check (default port: 443)
  • PORT - Optional custom port (e.g., example.com:8443)

Options

Option Description
--no-color Disable color output for plain text
--json Output certificate data as JSON
--json-pretty Pretty-print JSON output (requires --json)
-p, --print-cert Print the PEM certificate to stdout
--debug Enable debug output for troubleshooting
-i, --issuer Print only the certificate issuer
-s, --subject Print only the certificate subject
-a, --san Print only the Subject Alternative Names (SANs)
--warn-days N Warning threshold in days before expiry (default: 30)
--critical-days N Critical threshold in days before expiry (default: 7)
--timeout SEC Connection timeout in seconds (default: 10)
--ip-version auto, 4, or 6 network family preference
--input FILE Read targets from file (- reads from stdin)
--workers N Worker threads for batch mode (--input)
--insecure, -k Allow insecure connections (bypass certificate validation)
--version Show version and exit
-h, --help Show help message

Examples

Basic certificate check:

ssl-checkup example.com

Check custom port:

ssl-checkup example.com:8443

Print specific certificate fields:

ssl-checkup -i example.com          # Issuer only
ssl-checkup -s example.com          # Subject only
ssl-checkup -a example.com          # SANs only

Debug and troubleshooting:

ssl-checkup --debug example.com     # Detailed debug output
ssl-checkup --insecure expired.badssl.com  # Skip validation

Export certificate:

ssl-checkup -p example.com > cert.pem       # Save PEM certificate
ssl-checkup --no-color example.com > info.txt  # Plain text output

JSON output and policy exit codes:

ssl-checkup --json example.com
ssl-checkup --json --json-pretty example.com
ssl-checkup --warn-days 30 --critical-days 7 example.com

Exit codes in policy mode:

  • 0 valid
  • 1 warning
  • 2 critical/expired
  • 10+ operational errors (DNS/socket/SSL/internal)

Batch checks:

ssl-checkup --input targets.txt --workers 8
cat targets.txt | ssl-checkup --input - --json --workers 4

Requirements

  • Python: 3.11 or higher
  • Optional Dependencies (install with pip install "ssl-checkup[full]"):
    • termcolor>=3.1.0 (enhanced colorized output)
    • cryptography>=45.0.5 (advanced certificate parsing)

Note: The tool works without optional dependencies, with graceful fallbacks for missing features.

Development

Quick Start

# Clone and set up development environment
git clone https://github.com/BaDxKaRMa/ssl-checkup.git
cd ssl-checkup
uv sync

# Run tests
make test

# Run with coverage
make test-coverage

# Run all quality checks
make check-all

Contributing

  1. Fork and clone the repository
  2. Set up development environment: uv sync
  3. Run tests to ensure everything works: make test
  4. Make your changes with appropriate tests
  5. Run quality checks: make check-all
  6. Submit a pull request

Releasing (Maintainers)

This project uses automated PyPI publishing via GitHub Actions. To release a new version:

Option 1: Using Makefile (Recommended)

# Create and push a new release in one command
make release-push VERSION=1.1.0

Option 2: Manual Process

# 1. Update version in pyproject.toml
version = "1.1.0"

# 2. Commit and tag the release
git add pyproject.toml
git commit -m "Release v1.1.0"
git tag v1.1.0

# 3. Push to trigger automated PyPI upload
git push && git push --tags

What happens automatically:

  • GitHub Actions builds the package with uv
  • Runs quality checks with twine check
  • Uploads to PyPI using stored API token
  • New version is available within minutes

Requirements for automated releases:

  • PyPI API token stored in GitHub Secrets as PYPI_API_TOKEN
  • Version must follow semantic versioning (e.g., 1.0.0, 1.1.0, 2.0.0)

Troubleshooting

Common Issues

Missing dependencies:

# For development - sync all dependencies
uv sync

# Or install individual packages if needed
uv pip install termcolor cryptography

Connection issues:

# Use debug mode for detailed troubleshooting
ssl-checkup --debug example.com

# Test insecure connections for self-signed certificates
ssl-checkup --insecure your-internal-server.com

Installation issues:

# Ensure Python 3.11+
python --version

# Install with pipx (recommended for CLI tools)
pipx install ssl-checkup

# If pipx isn't available, install it first
pip install --user pipx
pipx ensurepath

# Alternative: Install with pip (may cause conflicts)
pip install ssl-checkup

# Or use uv for development
uv sync && uv run ssl-checkup example.com

# Force reinstall if needed
pipx reinstall ssl-checkup

License

GPL-3.0 License - see LICENSE file for details.


Project maintained by BaDxKaRMa. Contributions welcome!

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

ssl_checkup-1.1.0.tar.gz (41.8 kB view details)

Uploaded Source

Built Distribution

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

ssl_checkup-1.1.0-py3-none-any.whl (30.1 kB view details)

Uploaded Python 3

File details

Details for the file ssl_checkup-1.1.0.tar.gz.

File metadata

  • Download URL: ssl_checkup-1.1.0.tar.gz
  • Upload date:
  • Size: 41.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for ssl_checkup-1.1.0.tar.gz
Algorithm Hash digest
SHA256 5b68433a6786b6fd8fd56a0187e3459822e50b5e724867afcabc0964edcf491a
MD5 251411e398106e8a08b8d1abef94a16f
BLAKE2b-256 1690f80403d326a17e5ea733815afc965a77f835f54609db65519e05fd4ffbe3

See more details on using hashes here.

File details

Details for the file ssl_checkup-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: ssl_checkup-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 30.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for ssl_checkup-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 49d928debe417ac1a0c18f07fce4abfeb55fe385bd9126f1fd7a45b3623b44c6
MD5 c134989e80d780ecc7fe2cd98cb04eb9
BLAKE2b-256 7ed6ef47cbf405bba0fdd0637eec46339f48bf405bfefda5ce08975b515dd9e3

See more details on using hashes here.

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