pub struct ClientHello<'a> {
pub(super) server_name: &'a Option<DnsName<'a>>,
pub(super) signature_schemes: &'a [SignatureScheme],
pub(super) alpn: Option<&'a Vec<ProtocolName>>,
pub(super) server_cert_types: Option<&'a [CertificateType]>,
pub(super) client_cert_types: Option<&'a [CertificateType]>,
pub(super) cipher_suites: &'a [CipherSuite],
pub(super) certificate_authorities: Option<&'a [DistinguishedName]>,
}
Expand description
A struct representing the received Client Hello
Fields§
§server_name: &'a Option<DnsName<'a>>
§signature_schemes: &'a [SignatureScheme]
§alpn: Option<&'a Vec<ProtocolName>>
§server_cert_types: Option<&'a [CertificateType]>
§client_cert_types: Option<&'a [CertificateType]>
§cipher_suites: &'a [CipherSuite]
The certificate_authorities extension, if it was sent by the client.
Implementations§
Source§impl<'a> ClientHello<'a>
impl<'a> ClientHello<'a>
Sourcepub fn server_name(&self) -> Option<&str>
pub fn server_name(&self) -> Option<&str>
Get the server name indicator.
Returns None
if the client did not supply a SNI.
Sourcepub fn signature_schemes(&self) -> &[SignatureScheme]
pub fn signature_schemes(&self) -> &[SignatureScheme]
Get the compatible signature schemes.
Returns standard-specified default if the client omitted this extension.
Sourcepub fn alpn(&self) -> Option<impl Iterator<Item = &'a [u8]>>
pub fn alpn(&self) -> Option<impl Iterator<Item = &'a [u8]>>
Get the ALPN protocol identifiers submitted by the client.
Returns None
if the client did not include an ALPN extension.
Application Layer Protocol Negotiation (ALPN) is a TLS extension that lets a client submit a set of identifiers that each a represent an application-layer protocol. The server will then pick its preferred protocol from the set submitted by the client. Each identifier is represented as a byte array, although common values are often ASCII-encoded. See the official RFC-7301 specifications at https://datatracker.ietf.org/doc/html/rfc7301 for more information on ALPN.
For example, a HTTP client might specify “http/1.1” and/or “h2”. Other well-known values are listed in the at IANA registry at https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids.
The server can specify supported ALPN protocols by setting ServerConfig::alpn_protocols
.
During the handshake, the server will select the first protocol configured that the client supports.
Sourcepub fn cipher_suites(&self) -> &[CipherSuite]
pub fn cipher_suites(&self) -> &[CipherSuite]
Get cipher suites.
Sourcepub fn server_cert_types(&self) -> Option<&'a [CertificateType]>
pub fn server_cert_types(&self) -> Option<&'a [CertificateType]>
Get the server certificate types offered in the ClientHello.
Returns None
if the client did not include a certificate type extension.
Sourcepub fn client_cert_types(&self) -> Option<&'a [CertificateType]>
pub fn client_cert_types(&self) -> Option<&'a [CertificateType]>
Get the client certificate types offered in the ClientHello.
Returns None
if the client did not include a certificate type extension.
Get the certificate_authorities extension sent by the client.
Returns None
if the client did not send this extension.