Skip to content

Repository files navigation

SSLHawk

Track the expiry date of your SSL/TLS certificates.

SSLHawk is a small self-hosted service that keeps an eye on the SSL/TLS certificates of the domains you configure. A scheduled job opens a TLS connection to each active domain, reads the server certificate and stores its expiry date, common name (CN) and issuer. A dashboard highlights the domains that are approaching expiry, and optional email alerts can notify you before a certificate expires.

Features

  • Track certificate expiry, CN and issuer for any number of domains
  • Scheduled background check (cron-configurable at runtime)
  • Dashboard with warning / danger / expired thresholds (configurable)
  • Optional email alerts via SMTP

Running with Docker

With Docker Compose

docker-compose.yml pulls the published image from Docker Hub (uomofocaccin/sslhawk):

docker compose up -d

If you want to build the image locally instead (e.g. to test local changes), use docker-compose-build.yml:

docker compose -f docker-compose-build.yml up -d --build

With docker run

The image is published on Docker Hub as uomofocaccin/sslhawk.

docker run -d \
  --name sslhawk \
  -p 8080:8080 \
  -v sslhawk-data:/app/db \
  -e JWT__JWTKey="CHANGE_ME_use_a_long_random_secret" \
  --restart unless-stopped \
  uomofocaccin/sslhawk:latest
  • -v sslhawk-data:/app/db mounts a named volume so the SQLite database survives container restarts/upgrades.
  • JWT__JWTKey must be changed to a long random secret before deploying; it is used to sign the JWT tokens issued at login.

⚠️ Default credentials: admin / admin

On first start a default admin user is created with username admin and password admin. Change it immediately after the first login.

You can change the admin password either from the UI or by setting the ADMIN_PASSWORD environment variable (applied at startup).

Tech stack

  • Backend: ASP.NET Core 8 Web API, Dapper + SQLite, FluentMigrator, Quartz (scheduling), MailKit (SMTP)
  • Frontend: Vue 3 (Composition API), Vue Router, Vite
  • Auth: JWT Bearer, SHA-256 password hashing

Getting started (development)

Requirements: .NET 8 SDK and Node.js 18+.

Backend

# from the repository root
dotnet run --project backend/api/SSLHawk.csproj

The API starts on http://localhost:5062 with Swagger available at http://localhost:5062/swagger. The SQLite database and schema are created automatically on first run.

Frontend

cd frontend
npm install
npm run dev        # Vite dev server on http://localhost:5173

In development the SPA talks to the API on http://localhost:5062/api. In a production build the SPA is served by the backend from the same origin under /api.

Tests

dotnet test backend/SSLHawk.sln

Build for production

# 1. Build the SPA
cd frontend && npm run build      # output in frontend/dist

# 2. Copy the build into the backend's wwwroot
#    (the backend serves it as static files)
cp -r frontend/dist/* backend/api/wwwroot/

# 3. Publish / run the backend (listens on http://0.0.0.0:8080)
dotnet publish backend/api/SSLHawk.csproj -c Release

License

Released under the MIT License.

About

Track the expiry date of your SSL/TLS certificates. Self-hosted, web-based. Up and running in minutes.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Used by

Contributors

Languages