Extend backend TLS configuration with cert host and SNI #168
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
To get closer to parity with C@E backend configuration, we add the ability to specify a certificate hostname, distinct from both the host URI or any override host. In addition, backends can now specify whether to use SNI or not; if they do, and the cert hostname is present, it will be used for SNI.
That is slightly less flexible than C@E, which allows distinct SNI and cert hosts. That's not currently possible with the TLS implementation we're using in Viceroy, and the C@E customization is mostly used to disable SNI, which we provide here using a dedicated flag.
The new backend settings are:
cert_host
to specify the hostname for certificate checking (and SNI, if enabled)use_sni
, a boolean specifying whether to employ SNI for the backend.Both settings are optional. If
cert_host
is not specified, the host from the backend URI is used instead. Ifuse_sni
is not specified, SNI is enabled by default.Note: this PR does not include tests, which would require quite a bit of scaffolding to do properly. I have, however, tested locally using a real
fastly.toml
provided by a customer, which requirescert_host
specification to properly reach the backend.