A large share of self-hosted servers sit behind a certificate the operator issued
themselves. Refusing them outright excludes those operators. Accepting anything
turns every client into an open door on a hostile network, and it is exactly the
kind of default that gets copied into eleven clients because the core made it
easy.
This is a security decision that has to be taken deliberately and written down
before any client depends on the behaviour.
What this produces
Validation on by default, with no way to turn it off through configuration the
core reads on its own.
If an exception mechanism exists at all, it is per server, it is initiated by the
operator through the client, it stores what was trusted rather than a blanket
permission, and it is visible afterwards. The core exposes the certificate that
failed so the client can show it. The core never decides to trust anything.
A named error in the vocabulary from #4 that distinguishes a validation failure
from any other transport failure, since the two need different sentences.
Done when
The decision is recorded in docs/decisions/. A test proves the core refuses an
untrusted certificate by default against the fake server. A test proves the
exception path, if there is one, is scoped to one server and does not widen to a
second. Blocked on #4, #21 and #101.
A large share of self-hosted servers sit behind a certificate the operator issued
themselves. Refusing them outright excludes those operators. Accepting anything
turns every client into an open door on a hostile network, and it is exactly the
kind of default that gets copied into eleven clients because the core made it
easy.
This is a security decision that has to be taken deliberately and written down
before any client depends on the behaviour.
What this produces
Validation on by default, with no way to turn it off through configuration the
core reads on its own.
If an exception mechanism exists at all, it is per server, it is initiated by the
operator through the client, it stores what was trusted rather than a blanket
permission, and it is visible afterwards. The core exposes the certificate that
failed so the client can show it. The core never decides to trust anything.
A named error in the vocabulary from #4 that distinguishes a validation failure
from any other transport failure, since the two need different sentences.
Done when
The decision is recorded in
docs/decisions/. A test proves the core refuses anuntrusted certificate by default against the fake server. A test proves the
exception path, if there is one, is scoped to one server and does not widen to a
second. Blocked on #4, #21 and #101.