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.
- 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
docker-compose.yml pulls the published image from Docker Hub
(uomofocaccin/sslhawk):
docker compose up -dIf 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 --buildThe 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/dbmounts a named volume so the SQLite database survives container restarts/upgrades.JWT__JWTKeymust be changed to a long random secret before deploying; it is used to sign the JWT tokens issued at login.
On first start a default admin user is created with username
adminand passwordadmin. 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).
- 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
Requirements: .NET 8 SDK and Node.js 18+.
# from the repository root
dotnet run --project backend/api/SSLHawk.csprojThe 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.
cd frontend
npm install
npm run dev # Vite dev server on http://localhost:5173In 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.
dotnet test backend/SSLHawk.sln# 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 ReleaseReleased under the MIT License.