A command-line tool that calls the SSL Labs API to perform SSL/TLS testing on hosts and generates comprehensive CSV and HTML reports.
- API v4 support with registered email (Qualys SSL Labs)
- API v3 fallback (no email required, deprecated by Qualys)
- Beautiful HTML reports with customizable templates
- Batch processing of multiple hosts
- Docker support for containerized execution
All notable changes to this project will be documented in CHANGELOG.
Supports Python 3.11, 3.12, 3.13
- Poetry - Modern dependency management
- Makefile - Convenient command shortcuts for common tasks
- pytest - Testing framework with coverage reporting
- black - Code formatting
- flake8 - Python code linting
- yamllint - YAML file linting
- CodeQL - Automated security analysis (workflow)
- Secrets Scan - Gitleaks and TruffleHog for detecting hardcoded secrets (workflow)
- Snyk - Vulnerability scanning (workflow)
- Dependabot - Automated dependency updates (config)
- GitHub Actions - Automated testing across Python 3.11-3.13
- Codecov - Code coverage reporting
- Stale Issue Management - Automatically closes inactive issues
Sample input: sample/SampleServerList.txt
- summary.html - Visual report (sample output)
- summary.csv - Data export (sample output)
- {hostname}.json - Detailed API response (sample output)
You can modify report templates and styles:
# Install pipx if needed
pip install pipx
# Install ssllabs-scan
pipx install .
# Run from anywhere
ssllabs-scan --help# Install directly
pip install .
# Run the tool
ssllabs-scan --help# Quick setup
make setup-init
# Or manual setup
make setup-venv
make install-all
# Run with Poetry
poetry run ssllabs-scan --help# Using API v3 (no registration required, being deprecated)
ssllabs-scan sample/SampleServerList.txt
# Using API v4 (recommended, requires registration)
ssllabs-scan sample/SampleServerList.txt --email your@email.com# Build image
docker build -t ssllabsscan .
# Run with mounted directory
mkdir out
cp sample/SampleServerList.txt out/
docker run --mount type=bind,source=./out,target=/tmp ssllabsscan \
-o /tmp/output.html -s /tmp/output.csv /tmp/SampleServerList.txt$ ssllabs-scan sample/SampleServerList.txt
Start analyzing duckduckgo.com...
Status: DNS, StatusMsg(Resolving domain names): waiting 30 secs until next check...
Status: IN_PROGRESS, StatusMsg(None): waiting 30 secs until next check...
Status: IN_PROGRESS, StatusMsg(None): waiting 30 secs until next check...
Start analyzing google.com...
Status: DNS, StatusMsg(Resolving domain names): waiting 30 secs until next check...
Status: IN_PROGRESS, StatusMsg(None): waiting 30 secs until next check...
...
Creating summary.html ...
β‘ API v4 requires one-time registration with Qualys SSL Labs. See Introduction of API v4.
API v3 was deprecated on December 31st, 2023. All users should migrate to API v4.
β‘ The SSL Labs API has rate limits. Common status codes:
400- Invalid parameters429- Request rate too high500- Internal error503- Service unavailable (maintenance)529- Service overloaded
See the SSL Labs API Documentation for details.
make setup-init # First-time setup (configure, lock, install everything)
make help # Show all available commands
make install-all # Install all dependencies (main, dev, test)
make test # Run tests without coverage
make test-with-coverage # Run tests with coverage
make format-python # Auto-format Python code
make lint-python # Lint Python code
make lint-yaml # Lint YAML files
make pre-commit # Run all quality checks (format, lint, test)
make build # Build the package
make clean # Clean build artifacts# Run tests with coverage
make test-with-coverage
# Run tests only
make test
# Format and lint code
make format-python
make lint-python
make lint-yaml
# Run all quality checks before committing
make pre-commit# Update dependencies to latest compatible versions
make update-deps
# Regenerate lock file
make lockssllabs-scan/
βββ .github/
β βββ ISSUE_TEMPLATE/ # Bug report and feature request templates
β βββ workflows/ # CI/CD workflows
β βββ dependabot.yml # Dependency updates config
β βββ pull_request_template.md
βββ ssllabsscan/ # Main Python package
β βββ __init__.py
β βββ main.py # CLI entry point
β βββ ssllabs_client.py # API client
β βββ export_response.py # Response handling
β βββ report_template.py # HTML template
β βββ styles.css # Report styling
βββ tests/ # Unit tests
β βββ test_main.py
β βββ test_ssllabs_client.py
β βββ test_export_response.py
β βββ test_report_template.py
βββ sample/ # Sample inputs and outputs
βββ pyproject.toml # Project metadata and dependencies
βββ Makefile # Build and test commands
βββ Dockerfile # Container definition
βββ CHANGELOG.md # Version history
βββ CODE_OF_CONDUCT.md # Community guidelines
βββ CONTRIBUTING.md # Contribution guidelines
βββ SECURITY.md # Security policy
βββ README.md # This file
Contributions are welcome! Please see:
- CONTRIBUTING.md - Contribution guidelines
- CODE_OF_CONDUCT.md - Community standards
For security issues, please see SECURITY.md for our security policy and reporting guidelines.
