| On instantiation, a Puppet::HTTP::Client use a Puppet::SSL::Context to verify secure connections to remote hosts. The Puppet::SSL::Provider provide convenience methods to build SSL Contexts:
- create_insecure_context: An insecure SSL Context, allowing connections to any host without client certificate authentication;
- create_root_context: A basic SSL Context trusting the passed certificates and that does not allow client certificate authentication;
- create_system_context: A basic SSL Context trusting system certificates but not checking CRL and not allowing client certificate authentication;
- create_context: A SSL Context suitable for communication with puppet trusting only the puppet CA, checking CRL and using client certificate authentication.
None of these SSL Context allow to download files served by a server using certificates signed by a trusted third-party (system store) but with client certificate authentication. We use this scheme to distribute files to our puppet nodes from servers which use standard TSL certificates provided by Let's Encrypt: the certificate is trusted in the system store, but we also require a client certificate signed by our Puppet CA for the client to download files. This issue is about making it possible for the base Puppet HTTP Client to generate a SSL Context suitable for this kind of usages. |