Skip to content

Conversation

@jmcrawford45
Copy link
Contributor

Motivation:

Historically, BoringSSL lacked a built-in method to select between RSA and ECDSA certificates. The selection process, especially at TLS 1.2, is quite complex, as detailed in this link. TLS 1.3 simplifies this process significantly. Additionally, within ECDSA, there are different curves to consider, and future developments will introduce post-quantum key types. Recently, the SSL Credential API was introduced to BoringSSL to address this and a variety of other certificate negotiation decisions, such as:

Different kinds of credentials (delegate credentials, raw public keys, external PSKs, and more future innovations.
Negotiation for trust anchors to aid in PQ transitions and PKI agility.

Modifications:

Add JNI bindings for all the existing SSL_Credential related functionality in BoringSSL.

Result:

The SSL_CREDENTIAL consolidates everything related to a single "credential" into an object. Credentials can vary in type, such as X.509 certificates or others. Each credential has criteria, based on TLS protocol rules, to determine its applicability to a connection. Users configure an ordered preference list of credentials, and BoringSSL selects the first matching one.

This approach can be used alongside application-specific selection logic, like SNI dispatch. End users would use their criteria to select a list of candidates, such as an ECDSA and RSA certificate for a host, configure them in preference order with BoringSSL, and BoringSSL will evaluate them according to protocol rules.

Implements #918

@jmcrawford45 jmcrawford45 marked this pull request as ready for review June 25, 2025 19:24
@argha-c
Copy link

argha-c commented Jun 26, 2025

@normanmaurer: If you could PTAL. Curious if you have a different design suggestion? This should pave the path for PQC support in netty-tcnative.

@normanmaurer normanmaurer requested a review from chrisvest June 27, 2025 14:34
Copy link
Member

@normanmaurer normanmaurer left a comment

Choose a reason for hiding this comment

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

First round of review...

@jmcrawford45
Copy link
Contributor Author

@normanmaurer @chrisvest the first rounds of feedback should be addressed; I'm not sure if the centos6 build failure is related to my change.

@chrisvest
Copy link
Member

I think this looks good. Sorry it took a while to get back to reviewing it again.

@jmcrawford45
Copy link
Contributor Author

@chrisvest thank you for the review, I can look into integrating this once it merges. @normanmaurer the requested changes is still showing from the first round review, I'm not sure if that's blocking or not for this repo

@jmcrawford45
Copy link
Contributor Author

@normanmaurer would you be able to take another look this week?

@normanmaurer
Copy link
Member

@jmcrawford45 I am currently on PTO... will check once back

Copy link
Member

@normanmaurer normanmaurer left a comment

Choose a reason for hiding this comment

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

LGTM... Thanks a lot!

@normanmaurer normanmaurer merged commit 2a47a58 into netty:main Aug 15, 2025
16 of 17 checks passed
@normanmaurer normanmaurer added this to the 2.0.73.Final milestone Aug 15, 2025
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.

4 participants