{"id":16931092,"url":"https://github.com/issif/cercat","last_synced_at":"2026-03-17T22:03:49.446Z","repository":{"id":42064702,"uuid":"255634749","full_name":"Issif/cercat","owner":"Issif","description":"Monitor issued certificates in real-time and send alerts to Slack when a domain matches.","archived":false,"fork":false,"pushed_at":"2025-03-11T13:44:29.000Z","size":306,"stargazers_count":35,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-18T11:04:07.149Z","etag":null,"topics":["certificate","certificate-transparency","security-tools","slack"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Issif.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-14T14:37:11.000Z","updated_at":"2024-10-12T09:25:23.000Z","dependencies_parsed_at":"2024-10-28T13:17:33.941Z","dependency_job_id":"26999584-1af0-4bff-bc95-f411115a55c9","html_url":"https://github.com/Issif/cercat","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Issif%2Fcercat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Issif%2Fcercat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Issif%2Fcercat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Issif%2Fcercat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Issif","download_url":"https://codeload.github.com/Issif/cercat/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244951426,"owners_count":20537385,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["certificate","certificate-transparency","security-tools","slack"],"created_at":"2024-10-13T20:43:12.433Z","updated_at":"2026-03-17T22:03:49.439Z","avatar_url":"https://github.com/Issif.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cercat\n\n![release](https://flat.badgen.net/github/release/issif/cercat/latest?color=green) ![last commit](https://flat.badgen.net/github/last-commit/issif/cercat) ![licence](https://flat.badgen.net/badge/license/MIT/blue) ![docker pulls](https://flat.badgen.net/docker/pulls/issif/cercat?icon=docker)\n\n## Description\n\n`certcat` is for **Certificate Catcher**. It monitors issued certificates from [CertStream](https://certstream.calidog.io/) stream and sends an alert to **Slack** if a domain matches a specified **regexp**.\n\n```bash\n               websocket    +----------+   POST\nCertSteam \u003c-----------------\u003e cercat   +-----------\u003e Slack\n                            | (regexp) |\n                            +----------+\n```\n\n![screenshot](https://github.com/issif/cercat/raw/master/screenshot.png)\n\nIt's highly inspired by [CertStreamMonitor](https://github.com/AssuranceMaladieSec/CertStreamMonitor/blob/master/README.md), the first idea was to improve performances for catching with a **Golang** version.\n\nThe regexp is applied on principal and SAN domains. If one of these domains is an [IDN](https://en.wikipedia.org/wiki/Internationalized_domain_name), it's converted in an equivalent in ASCII before applying the regexp.\n\n## Configuration\n\nTwo methods are available for configuration and can be mixed :\n- *config file*\n- *environment variables* (they override values in *config file*)\n\n### With config file\n\n```bash\n---\nSlackWebhookURL: \"\" #Slack Webhook URL\nSlackIconURL: \"\" #Slack Icon (Avatar) URL\nSlackUsername: \"\" #Slack Username\nRegexp: \".*\\\\.fr$\" #Regexp to match. Can't be empty. It uses Golang regexp format\n```\n\n### With env vars\n\n- **SLACKWEBHOOKURL**: Slack Webhook URL\n- **SLACKICONURL**: Slack Icon (Avatar) URL\n- **SLACKUSERNAME**: Slack Username\n- **REGEXP**: Regexp to match. Can't be empty. It uses Golang regexp format\n\n## Run\n\n```\nusage: cercat [\u003cflags\u003e]\n\nFlags:\n      --help                   Show context-sensitive help (also try --help-long and --help-man).\n  -c, --configfile=CONFIGFILE  config file\n```\n\n## Docker\n\nYou can run with Docker :\n\n```\ndocker run -d -e SLACKWEBHOOKURL=https://hooks.slack.com/services/XXXXX -e REGEXP=\".*\\\\.fr$\" issif/cercat:latest \n```\n\n## Logs\n\n```bash\nINFO[0005] A certificate for 'xxxx.fr' has been issued : {\"domain\":\"xxxx.fr\",\"SAN\":[\"xxxx.fr\",\"www.xxxx.fr\"],\"issuer\":\"Let's Encrypt\",\"Addresses\":[\"X.X.X.129\"]} \nINFO[0008] A certificate for 'xxxx.fr' has been issued : {\"domain\":\"xxxx.fr\",\"SAN\":[\"xxxx.fr\",\"www.xxxx.fr\"],\"issuer\":\"Let's Encrypt\",\"Addresses\":[\"X.X.X.116\"]} \n```\n\n## Profiles, Traces and Metrics\n\nThe service opens port `6060` for `profiles`, `traces` and `expvar`. Go to [http://localhost:6060/debug/pprof](http://localhost:6060/debug/pprof) and [http://localhost:6060/debug/vars](http://localhost:6060/debug/vars).\n\n## License\n\nMIT\n\n## Authors\n\nThomas Labarussias - [@Issif](https://www.github.com/issif)\nAyoul Elaassal - [@Ayoul3](https://github.com/ayoul3)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fissif%2Fcercat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fissif%2Fcercat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fissif%2Fcercat/lists"}