openvox 8x: document custom CA for HTTPS-inspecting proxies#241
Conversation
Add a new page covering how to add a proxy CA to OpenVox's vendored cert bundle so that gem installs and puppet module installs work behind Squid SSL Bump and similar intercepting proxies. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Michael Harp <mike@mikeharp.com>
77b3492 to
623fa16
Compare
|
|
||
| ```console | ||
| cat /path/to/proxy-ca.pem >> /opt/puppetlabs/puppet/ssl/cert.pem | ||
| ``` |
There was a problem hiding this comment.
This works, but will not survive upgrades that update the public CA bundle. When that happens, integrations will break and someone has to remember to repeat the append.
A better solution should be:
cp /path/to/proxy-ca.pem /opt/puppetlabs/puppet/ssl/certs/
# This step "activates" the new file by writing out symlinks that allow the certs
# to be looked up by fingerprint.
/opt/puppetlabs/puppet/bin/openssl rehashThe contents of the certs/ directory should be left alone by an upgrade. There may be some workflows that see changes to cert.pem but miss files added to certs/ after rehash --- these should be reported as bugs so that we can fix them up.
Last I looked, Windows is in a bit of a bind as openssl rehash was wrapped in one giant #ifndef WINDOWS in the C source, but maybe things are better in OpenSSL 3.5.
There was a problem hiding this comment.
If the package resource had an option to set an environment variable it would solve the problem. It is enough to set: SSL_CERT_FILE=/path/to/cert.pem
- Promote certs/+rehash as the preferred quick fix (survives upgrades, no environment variable management needed) per Sharpie's review - Note Windows caveat for openssl rehash - Update Puppet example to lead with file+exec rehash; keep concat approach as the SSL_CERT_FILE alternative - Retain direct cert.pem append as a one-liner fallback Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Michael Harp <mike@mikeharp.com>
The certs/+rehash file+exec example covers the recommended approach without needing an extra module dependency. SSL_CERT_FILE manual steps remain documented for Windows edge cases. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Michael Harp <mike@mikeharp.com>
Add ln -s as an integration pattern in the Puppet section for nodes where the CA is already deployed by puppet/trusted_ca into the OS trust store. Remove symlink from the manual quick fix section — cp is simpler when deploying the cert fresh. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Michael Harp <mike@mikeharp.com>
Summary
DEFAULT_CERT_FILEat/opt/puppetlabs/puppet/ssl/cert.pemandDEFAULT_CERT_DIRat/opt/puppetlabs/puppet/ssl/certs/)ssl_trust_store(module downloads only),SSL_CERT_FILEwith a merged bundle (universal), andcerts/+openssl rehash(recommended — survives upgrades, no env var management)file+exec rehashfor thecerts/approach;puppetlabs/concatfor theSSL_CERT_FILEapproachMotivation
Reported by a community member: gem installs and
puppet module installfail behind Squid SSL Bump even when the proxy CA is in the system trust store.Source verification
Claims verified against the OpenVox source:
OpenSSL::X509::DEFAULT_CERT_FILE=/opt/puppetlabs/puppet/ssl/cert.pemandDEFAULT_CERT_DIR=/opt/puppetlabs/puppet/ssl/certs/confirmed on a liveopenvox-agent-8.27.0installpuppet module installusesPuppet::SSL::SSLProvider#create_system_context→create_x509_store(include_system_store: true)→store.set_default_paths, which respects bothDEFAULT_CERT_FILEandDEFAULT_CERT_DIR(ssl_provider.rb:258)ssl_trust_storescope confirmed via defaults.rb:1020 — applies to forge/https only, not gem subprocessespuppet_gemprovider runsgemas a subprocess (puppet_gem.rb), so only inheritsSSL_CERT_FILEfrom the service environmentTest results
Tested on
openvox-agent-8.27.0(CentOS Stream 9, aarch64) via Vagrant. Generated a self-signed test CA, started a Python HTTPS server using that CA, and verified each approach:Puppet
file+exec rehashapproach also verified — idempotent, hash symlink created, Ruby connects withoutSSL_CERT_FILE:Test plan