Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplify TLS peer verification for replication #4390

Open
nickva opened this issue Jan 18, 2023 · 0 comments
Open

Simplify TLS peer verification for replication #4390

nickva opened this issue Jan 18, 2023 · 0 comments

Comments

@nickva
Copy link
Contributor

nickva commented Jan 18, 2023

By default replicator TLS connections do not verify the TLS peer certificates

ssl_verify_options(true) ->
CAFile = cfg("ssl_trusted_certificates_file"),
[{verify, verify_peer}, {cacertfile, CAFile}];
ssl_verify_options(false) ->
[{verify, verify_none}].

It's probably for a good reason, Erlang < 25 doesn't even have a good way to load OS provided CAs. Only starting in Erlang 25 we have public_key:cacerts_get(). The certificates are loaded and cached in a permanent literal term and then it can be easily used as:

{ok, _} = httpc:request(get, {"https://erlang.com", []}, [{ssl, [{verify, verify_peer}, {cacerts, public_key:cacerts_get()}]}], []), ok.

The enhancement would be to make TLS peer verification a bit more ergonomic making it easy to use OS provided CAs. We could backport Erlang 25 cert loading code unto a compat couch_util function until we can have Erlang 25+ only required OTP version.

Another option is to use certify, but that's another dependency to bring in and since Erlang already plans on providing the feature might as well use the OTP solution.

As for how to configure it, perhaps we could have have a special ssl_trusted_certificates_file value indicating we want to load the OS provided CAs, or a separate config option like ssl_use_os_certificates = true | false. Maybe even allow appending user's CA trusted certificated to the OS ones?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant