- To address a trademark request, we have renamed our project from ultraPKI to nextPKI. You can now find us at github.com/nextpki 🤡
- Introduced webhook-proxy.py: a local HTTP proxy server that receives webhook calls from agents and forwards them to the NextPKI Dashboard.
- Config: Added support for exclude_certs in config.yaml to filter certificates by issuer and CN/subject (with wildcard support).
- Config: Added icmp_timeout_ms to config.yaml for controlling ICMP timeouts (IPv6 discovery).
- Scanner: Implemented certificate filtering logic; certificates matching exclude_certs are not sent to the webhook.
- Scanner: Removed HTTPHeaders from ScanResult and all webhook payloads.
- Unified protocol handling via ScanAndSendWithProtocol and protocolHandlers
- Added global WebPorts and SmtpPorts mappings for protocol detection
- ScanAndSend now defaults to http1 for unknown ports
- Refactored getPrimaryIP and getMachineID, moved to shared.go
- Improved documentation and code clarity in scanner.go
- Updated config and test-config.yaml for modern include/exclude usage
- Removed legacy ScanAndSend logic and updated all call sites
- Various bugfixes and maintainability improvements
- Added new configurable values in config.yaml:
concurrency_limit: Controls the maximum number of concurrent scans (default: 8).dial_timeout_ms: Sets the dial timeout for network connections in milliseconds.http_timeout_ms: Sets the HTTP request timeout in milliseconds.webhook_timeout_ms: Sets the timeout for webhook result submissions in milliseconds.
- Scanning engine now uses a semaphore to enforce the concurrency limit, improving resource control and stability.
- All timeouts are now consistently applied in the scanner logic, allowing for fine-tuned network and webhook performance.
- Improved documentation in config.yaml for all new and existing fields.
- Refactored scanner to use config-driven concurrency and timeout values throughout.
-
Major config.yaml documentation overhaul: clearer sectioning, modern examples, and detailed comments for each field.
-
Added explicit description for NextPKI_token, clarifying its use for NextPKI cloud authentication.
-
Protocol tagging in include_list now fully supported and documented; protocol rules are applied for custom ports and default to http1 for web ports.
-
Improved logic for sending host headers and GET requests for http1/h2/h3 protocols, even on custom ports.
-
Exclusion logic and CIDR handling further refined for robust scanning control.
-
Various bugfixes and usability improvements for config parsing and scanning logic.
-
Config improvements:
- Renamed
static_hoststoinclude_listand addedexclude_listfor flexible host/IP management. - Added support for IPv4 CIDR ranges in both
include_list(expands to all IPs) andexclude_list(excludes all IPs in the range). IPv6 CIDRs are supported for exclusion only. - Backward compatibility: if
static_hostsis present, a warning is shown and it is used asinclude_list(unlessinclude_listis also present). - Updated config file examples and documentation for new fields and CIDR usage.
- Renamed
-
Scanning logic:
- All hosts and IPs (including those discovered via network interfaces or expanded from CIDRs) are now checked against
exclude_listbefore scanning. - Improved exclusion logic: hostnames and all resolved IPs are checked for exclusion, including CIDR matches.
- Ensured that no IP in the
exclude_listis scanned, regardless of how it is discovered.
- All hosts and IPs (including those discovered via network interfaces or expanded from CIDRs) are now checked against
-
Machine ID:
- The
machine_idcan now be set manually in the config file and is prioritized if present. - Improved fallback logic for deterministic machine ID generation, closely matching shell script behavior.
- The
-
Other:
- Added and updated config file examples for clarity.
- Improved debug logging for scanning and exclusion decisions.
- Improved certificate discovery: now attempts both ECDSA and RSA TLS handshakes for each port and submits all unique certificates to the webhook
- Added CIDR-based IP discovery for all IPv4 interfaces
- Excluded loopback (127.0.0.0/8) and broadcast (.255) addresses from scan
- Report now includes full TLS certificate chain
- NextPKI dashboard integration added (token-bound access, secure password setup)
- Added support for host:port entries in static_hosts to override global port list per host
- Integrated STARTTLS support for SMTP (e.g. port 587)
- SNI is now correctly set based on the original hostname (if provided)
- Hostnames in static_hosts are resolved to A and AAAA records; all resolved IPs are scanned
- IPv6 scanning is now conditional and fully configurable via enable_ipv6_discovery
- Webhook payload includes original hostname (if applicable)
- Updated README.md to reflect config changes and new usage patterns
- Added test-tls-server.sh script for local testing of discovery functionality
- Improved debug logging and error handling throughout