Skip to content

Make TLS groups configurable#8076

Draft
PallabPaul wants to merge 1 commit into
microsoft:mainfrom
PallabPaul:pallab-configurable-tls-groups
Draft

Make TLS groups configurable#8076
PallabPaul wants to merge 1 commit into
microsoft:mainfrom
PallabPaul:pallab-configurable-tls-groups

Conversation

@PallabPaul

Copy link
Copy Markdown
Member

No description provided.

"type": "array",
"items": {
"type": "string",
"enum": [

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The node configuration is not captured by attestation, and therefore also not by join policy, so it cannot contain security-sensitive settings such as supported groups. Otherwise a joining node could pick weak values that would neither be auditable through the ledger, nor rejected by policy.

I think this is ideally moved to the code, where we detect if we crypto provider support PQC values, and extend the list in that case. If it must be configurable per node, then it would have to be a CLI value, but I don't think it's necessary.

Comment thread src/tls/context.h
SSL_set1_curves_list(ssl, "P-521:P-384:P-256");
// Restrict the supported groups to those configured by the operator.
const auto group_list = groups_to_list(groups);
validate_groups(groups);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the relationship between groups and curves?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OpenSSL’s curves setters are exact legacy aliases for the groups setters—not separate constraints. “Groups” is the TLS 1.3 terminology encompassing EC curves, finite-field DH, and hybrid/PQ groups. Calling either replaces the same list; SSL_CTX_* sets context defaults, while SSL_* sets the individual connection.

The list controls key exchange and, for TLS ≤1.2, EC signature groups. In TLS 1.3, signatures are separate. Also, “first mutually supported group wins” is not strictly true: OpenSSL may prefer an existing key share to avoid a retry. OpenSSL 3.5 requires /-separated security tiers to strictly prefer PQ over classical fallback; this PR currently joins everything with :.

References: OpenSSL 3.3 groups/curves API and OpenSSL 3.5 group-tuple semantics.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TLS 1.3 separates key exchange groups from signature schemes:

SSL_CTX_set1_sigalgs_list(ctx, "ecdsa_secp384r1_sha384:rsa_pss_rsae_sha256");
SSL_set1_sigalgs_list(ssl, "ecdsa_secp384r1_sha384:rsa_pss_rsae_sha256");

For client-certificate authentication, there are corresponding *_set1_client_sigalgs_list() calls. PR #8076 does not set these, so OpenSSL’s defaults govern signatures; its groups setting controls only TLS 1.3 key agreement.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants