diff options
| author | Yuriy Andamasov <yuriy@vyos.io> | 2026-06-02 17:49:20 +0300 |
|---|---|---|
| committer | Yuriy Andamasov <yuriy@vyos.io> | 2026-10-04 12:13:18 +0300 |
| commit | bc1a054e14eaabd17326d63fa99c19c0a867130d (patch) | |
| tree | bc4a1b3fa781ff539afe7573e8e064646e4bc608 /src | |
| parent | fce6b4074f85a8112ba4de64bf2cee94eab704cd (diff) | |
| download | vyos-1x-bc1a054e14eaabd17326d63fa99c19c0a867130d.tar.gz vyos-1x-bc1a054e14eaabd17326d63fa99c19c0a867130d.zip | |
http-api-client: T8955: enable TLS verification by default
ApiClientConfig.verify_tls defaulted to False and ApiClient unconditionally
silenced urllib3's InsecureRequestWarning, so TLS peer verification was off by
default. The sole consumer, src/op_mode/config_sync.py, builds the client
without passing verify_tls and therefore connected to a *remote* secondary VyOS
node over HTTPS without verifying the certificate -- a MITM exposure on the
channel that carries the API key and the full configuration.
- ApiClientConfig.verify_tls now defaults to True and accepts bool | str;
a string is forwarded to requests as a CA bundle path (verify=<path>).
- InsecureRequestWarning is suppressed only when verification is explicitly
disabled (verify_tls is False), not when a CA path or True is set.
- config_sync reads an optional verify_tls from the secondary runtime settings,
defaulting to False to preserve current behaviour for self-signed secondaries.
The insecurity is now explicit at the call site instead of hidden in the
library default. Exposing a CA certificate (PKI reference) and peer
fingerprint pinning under service config-sync secondary is follow-up T9396.
🤖 Generated by [robots](https://vyos.io)
Diffstat (limited to 'src')
| -rw-r--r-- | src/op_mode/config_sync.py | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/op_mode/config_sync.py b/src/op_mode/config_sync.py index 8d473cc70..828cd8623 100644 --- a/src/op_mode/config_sync.py +++ b/src/op_mode/config_sync.py @@ -73,13 +73,22 @@ def _load_config_sync_settings() -> dict: key = secondary.get('key') port = int(secondary.get('port', 443)) timeout = int(secondary.get('timeout')) if secondary.get('timeout') else None + # config-sync talks to a remote secondary over HTTPS. TLS verification is + # off by default because secondary nodes typically present a self-signed + # certificate; an operator can opt in (True, or a CA bundle path) once the + # runtime config exposes it. + # TODO(T9396): expose ca-certificate / peer-fingerprint under + # service config-sync secondary + verify_tls = secondary.get('verify_tls', False) if not address or not key: raise opmode.UnconfiguredObject( 'Config-sync is not fully configured: missing secondary address/key' ) - return dict(host=address, key=key, port=port, timeout=timeout) + return dict( + host=address, key=key, port=port, timeout=timeout, verify_tls=verify_tls + ) class ConfigSyncDiffManager: |
