Security issue notifications
If you discover a potential security issue in s2n we ask that you notify
AWS Security via our vulnerability reporting page. Please do not create a public github issue.
Problem:
Applications using s2n-tls currently cannot access the server's certificate chain when certificate validation fails. The existing s2n_connection_get_peer_cert_chain API requires validation to have succeeded (S2N_ERR_CERT_NOT_VALIDATED is returned otherwise), which prevents applications from inspecting the certificate chain for logging or diagnostics when a handshake fails due to an untrusted or invalid certificate. This makes it harder to debug certificate validation failures, which currently return an opaque ("Certificate is untrusted") error which is not useful for debugging.
This would complement the existing s2n_connection_get_client_cert_chain API, which already provides this functionality for client-sent certificates.
Need By Date:
Sooner is better.
Solution:
A description of the possible solution in terms of S2N architecture. Highlight and explain any potentially controversial design decisions taken.
- Does this change what S2N sends over the wire? no
- Does this change any public APIs? yes, new public API
- Which versions of TLS will this impact? all versions
Possible problems to think through:
- How can we avoid increasing memory usage for all connections? Perhaps the chain can be removed after a successful handshake (since it's then available in the
get_peer_cert_chain method? Or maybe we need an opt-in mechanism on the connection to enable collecting this information?
- What format is the cert chain in? Directly what is received on the wire? Are there any TLS version differences in that format?
- Can we improve the error message instead of or in addition to exposing the raw cert chain?
Requirements / Acceptance Criteria:
What must a solution address in order to solve the problem? How do we know the solution is complete?
- RFC links: n/a
- Related Issues: n/a
- Will the Usage Guide or other documentation need to be updated? just documentation on the new function
- Testing: How will this change be tested?
- Will this change trigger SAW changes? probably no
- Should this change be fuzz tested? Hopefully, no net-new surface area for untrusted input. Applications would need to deal safely with the untrusted output from the new function, but this shouldn't be a meaningful shift from what they already need to cope with for the client cert chain.
This will need to get exposed in the Rust bindings, so that it can then be exposed in s2n-quic (cc aws/s2n-quic#3037).
Out of scope:
- Safely parsing the returned chain is in customer hands.
Security issue notifications
If you discover a potential security issue in s2n we ask that you notify
AWS Security via our vulnerability reporting page. Please do not create a public github issue.
Problem:
Applications using s2n-tls currently cannot access the server's certificate chain when certificate validation fails. The existing s2n_connection_get_peer_cert_chain API requires validation to have succeeded (S2N_ERR_CERT_NOT_VALIDATED is returned otherwise), which prevents applications from inspecting the certificate chain for logging or diagnostics when a handshake fails due to an untrusted or invalid certificate. This makes it harder to debug certificate validation failures, which currently return an opaque ("Certificate is untrusted") error which is not useful for debugging.
This would complement the existing
s2n_connection_get_client_cert_chainAPI, which already provides this functionality for client-sent certificates.Need By Date:
Sooner is better.
Solution:
A description of the possible solution in terms of S2N architecture. Highlight and explain any potentially controversial design decisions taken.
Possible problems to think through:
get_peer_cert_chainmethod? Or maybe we need an opt-in mechanism on the connection to enable collecting this information?Requirements / Acceptance Criteria:
What must a solution address in order to solve the problem? How do we know the solution is complete?
This will need to get exposed in the Rust bindings, so that it can then be exposed in s2n-quic (cc aws/s2n-quic#3037).
Out of scope: