docs/tls.md requires a TLS Stream to pass the integrator's cipher policy
through unchanged where the underlying library allows one to be selected, pinning
none of its own. RFC 5425 §4.2.3 is the requirement behind it: syslog
applications SHOULD permit administrators to select the cryptographic level as a
matter of local policy.
Neither adapter delivers that on the connection that actually gets negotiated.
OpenSSL — the setting binds TLS 1.2 and below only
SolidSyslogOpenSslStream.c sets a floor with no ceiling:
SSL_CTX_set_min_proto_version(ctx, TLS1_2_VERSION)
and configures ciphers through one call:
SSL_CTX_set_cipher_list(ctx, cipherList)
SSL_CTX_set_ciphersuites is never called anywhere in the pack. Since OpenSSL
1.1.1 those are two separate lists: set_cipher_list governs TLS 1.2 and below,
while TLS 1.3 ciphersuites have their own list and their own defaults. Against an
OpenSSL 3.0 peer, TLS 1.3 is what gets negotiated — so in the common case the
caller's CipherList has no effect on the cipher in use, and nothing says so.
The field's own documentation is accurate: "TLS 1.2 cipher list". What is
missing is the consequence, and the means to express a policy for TLS 1.3.
Mbed TLS — no cipher configuration at all
SolidSyslogMbedTlsStreamConfig has no cipher or ciphersuite field, and
SolidSyslogMbedTlsStream.c calls no ciphersuite API. The preset's defaults
apply and the integrator has no way to express a policy.
What the fix might be
Three routes, and this issue does not pick one:
- Expose a ciphersuite setting alongside the existing list, so a policy can be
stated for the version actually negotiated.
- Pin a ceiling as well as a floor, which makes the existing list bind again —
at the cost of refusing a better protocol version.
- Decide the obligation is met by the library's own defaults, which for TLS 1.3
are all AEAD with forward secrecy, and say so on the contract page instead.
Route 3 is a documentation change rather than a code one, and would mean amending
docs/tls.md. It should not be chosen by default just because it is cheapest.
Acceptance
- An integrator can express a cipher policy that binds the connection that is
negotiated, or the contract states plainly that they cannot and why
- Both TLS adapters reach the same answer
- The divergence notes come off both platform pages
docs/tls.mdrequires a TLSStreamto pass the integrator's cipher policythrough unchanged where the underlying library allows one to be selected, pinning
none of its own. RFC 5425 §4.2.3 is the requirement behind it: syslog
applications SHOULD permit administrators to select the cryptographic level as a
matter of local policy.
Neither adapter delivers that on the connection that actually gets negotiated.
OpenSSL — the setting binds TLS 1.2 and below only
SolidSyslogOpenSslStream.csets a floor with no ceiling:and configures ciphers through one call:
SSL_CTX_set_ciphersuitesis never called anywhere in the pack. Since OpenSSL1.1.1 those are two separate lists:
set_cipher_listgoverns TLS 1.2 and below,while TLS 1.3 ciphersuites have their own list and their own defaults. Against an
OpenSSL 3.0 peer, TLS 1.3 is what gets negotiated — so in the common case the
caller's
CipherListhas no effect on the cipher in use, and nothing says so.The field's own documentation is accurate: "TLS 1.2 cipher list". What is
missing is the consequence, and the means to express a policy for TLS 1.3.
Mbed TLS — no cipher configuration at all
SolidSyslogMbedTlsStreamConfighas no cipher or ciphersuite field, andSolidSyslogMbedTlsStream.ccalls no ciphersuite API. The preset's defaultsapply and the integrator has no way to express a policy.
What the fix might be
Three routes, and this issue does not pick one:
stated for the version actually negotiated.
at the cost of refusing a better protocol version.
are all AEAD with forward secrecy, and say so on the contract page instead.
Route 3 is a documentation change rather than a code one, and would mean amending
docs/tls.md. It should not be chosen by default just because it is cheapest.Acceptance
negotiated, or the contract states plainly that they cannot and why