Module ssl
boring only.Expand description
SSL/TLS support.
SslConnector and SslAcceptor should be used in most cases - they handle
configuration of the OpenSSL primitives for you.
§Examples
To connect as a client to a remote server:
use rama_boring::ssl::{SslMethod, SslConnector};
use std::io::{Read, Write};
use std::net::TcpStream;
let connector = SslConnector::builder(SslMethod::tls()).unwrap().build();
let stream = TcpStream::connect("google.com:443").unwrap();
let mut stream = connector.connect(Some("google.com"), stream).unwrap();
stream.write_all(b"GET / HTTP/1.0\r\n\r\n").unwrap();
let mut res = vec![];
stream.read_to_end(&mut res).unwrap();
println!("{}", String::from_utf8_lossy(&res));To accept connections as a server from remote clients:
use rama_boring::ssl::{SslMethod, SslAcceptor, SslStream, SslFiletype};
use std::net::{TcpListener, TcpStream};
use std::sync::Arc;
use std::thread;
let mut acceptor = SslAcceptor::mozilla_intermediate(SslMethod::tls()).unwrap();
acceptor.set_private_key_file("key.pem", SslFiletype::PEM).unwrap();
acceptor.set_certificate_chain_file("certs.pem").unwrap();
acceptor.check_private_key().unwrap();
let acceptor = Arc::new(acceptor.build());
let listener = TcpListener::bind("0.0.0.0:8443").unwrap();
fn handle_client(stream: SslStream<TcpStream>) {
// ...
}
for stream in listener.incoming() {
match stream {
Ok(stream) => {
let acceptor = acceptor.clone();
thread::spawn(move || {
let stream = acceptor.accept(stream).unwrap();
handle_client(stream);
});
}
Err(e) => { /* connection failed */ }
}
}§Panics in callbacks and streams
A panic never unwinds through BoringSSL. A panicking callback, future, finish closure or signer fails its operation with an error that carries the panic message (“callback panicked: …”); pending asynchronous work is dropped and never resumed; a panic while dropping it, or a waker, is contained too. A panicking transport stream fails the operation with an I/O error and is never used again. Callbacks that only observe (info, keylog, message, new and removed sessions) and session lookups cannot fail the handshake: their panics are contained, and a lookup reports a cache miss. A verify callback that panics records a failed verification, which, as for any verification result, only fails the handshake when the verify mode requires it. The panic hook still runs for every panic.
This relies on unwinding: with panic = "abort", or a panic hook that
aborts, every panic aborts as usual. A destructor that panics while its
own panic unwinds aborts too, as in any Rust code.
Modules§
- quic
- Transport-independent TLS handshakes for QUIC.
Structs§
- Alpn
Error - An error returned from an ALPN selection callback.
- Async
Private KeyMethod Error - A fatal error to be returned from async private key methods.
- Async
Select Cert Error - A fatal error to be returned from async select certificate callbacks.
- Certificate
Compression Algorithm - Certificate
Selection - Certificate-selection state, available only while the selection callback runs. Copy request metadata before moving it into an asynchronous operation. Borrowed metadata prevents mutating the SSL while that metadata is still used:
- Cipher
Bits - Information about the state of a cipher.
- Client
Hello - Client
Hello Shape - The cross-cutting choices that shape one connection’s ClientHello.
- Compliance
Policy - A compliance policy.
- Connect
Configuration - A type which allows for configuration of a client-side TLS session before connection.
- EchGrease
Shape - The algorithms and lengths of an ECH GREASE extension, never its keys or bytes.
- Error
- A general SSL error, based on
SSL_ERROR_*error codes. - Error
Code SSL_ERROR_*error code returned from SSL functions.- Extension
Type - Extension types, to be used with
ClientHello::get_extension. - GetSession
Pending Error - Error returned by the callback to get a session when operation could not complete and should be retried later.
- Grease
Lists - ClientHello lists that get a native GREASE value, first in the list (for extensions: first and last). This only applies to native lists: a list or extension order set explicitly is exact, and its GREASE codepoints are its only GREASE slots.
- MidHandshake
SslStream - An SSL stream midway through the handshake process.
- Name
Type - An identifier of a session name type.
- Private
KeyMethod Error - An error returned from a private key method.
- Select
Cert Error - An error returned from a certificate selection callback.
- Shutdown
State - The shutdown state of a session.
- SniError
- An error returned from the SNI callback.
- Ssl
- The state of an SSL/TLS session.
- Ssl3
Alert Level - SslAcceptor
- A type which wraps server-side streams in a TLS session.
- SslAcceptor
Builder - A builder for
SslAcceptors. - SslAlert
- An SSL/TLS alert.
- SslCipher
- Information about a cipher.
- SslCipher
Ref - Reference to an
SslCipher. - SslConnector
- A type which wraps client-side streams in a TLS session.
- SslConnector
Builder - A builder for
SslConnectors. - SslContent
Type - The record content type of an observed message.
- SslContext
- A context object for TLS streams.
- SslContext
Builder - A builder for
SslContexts. - SslContext
Ref - A borrowed reference to a
SslContext. - SslCredential
- A credential.
- SslCredential
Builder - A builder for
SslCredential. - SslCredential
Ref - A borrowed reference to a
SslCredential. - SslCurve
- A TLS Curve.
- SslEarly
Data Reason - Why 0-RTT data was or was not accepted on a connection.
- SslEch
Keys - SslEch
Keys Ref - A borrowed reference to a
SslEchKeys. - SslFiletype
- An identifier of the format of a certificate or key file.
- SslInfo
Callback Alert - SslInfo
Callback Mode - Options controlling the behavior of the info callback.
- SslMessage
- A protocol message observed by a message callback.
- SslMethod
- A type specifying the kind of protocol an
SslContextwill speak. - SslMode
- Options controlling the behavior of an
SslContext. - SslOptions
- Options controlling the behavior of an
SslContext. - SslRef
- A borrowed reference to a
Ssl. - SslRenegotiate
Mode - How a client handles a TLS 1.2 server’s renegotiation request.
- SslSession
- An encoded SSL session.
- SslSession
Cache Mode - Options controlling the behavior of session caching.
- SslSession
Ref - A borrowed reference to a
SslSession. - SslSignature
Algorithm - A signature verification algorithm.
- SslStream
- A TLS session over a stream.
- SslStream
Builder - A partially constructed
SslStream, useful for unusual handshakes. - SslVerify
Mode - Options controlling the behavior of certificate verification.
- SslVersion
- An SSL/TLS protocol version.
- Status
Type - An identifier of a certificate status type.
Enums§
- EchGrease
Cipher Suite - HPKE cipher suites supported for ECH GREASE. The KEM is always DHKEM(X25519, HKDF-SHA256), with a 32-byte encapsulated key.
- Grease
Values - How GREASE values are chosen.
- Handshake
Error - An error or intermediate state after a TLS handshake attempt.
- Padding
- ClientHello padding.
- Shutdown
Result - The result of a shutdown request.
- SslInfo
Callback Value - The
valueargument to an info callback. The most-significant byte is the alert level, while the least significant byte is the alert itself. - SslVerify
Error - Ticket
KeyCallback Result - Ticket key callback status.
- Unknown
Values - What to do with listed values a connection cannot negotiate: unknown extensions, groups, versions and signature algorithms.
Traits§
- Async
Private KeyMethod - Describes async private key hooks. This is used to off-load signing operations to a custom, potentially asynchronous, backend. Metadata about the key such as the type and size are parsed out of the certificate.
- Certificate
Compressor - Describes certificate compression algorithm. Implementation MUST implement transformation at least in one direction.
- Private
KeyMethod - Describes private key hooks. This is used to off-load signing operations to a custom, potentially asynchronous, backend. Metadata about the key such as the type and size are parsed out of the certificate.
Functions§
- select_
next_ proto - A standard implementation of protocol selection for Application Layer Protocol Negotiation (ALPN).
Type Aliases§
- BoxCertificate
Finish - Installs the credentials once a
BoxCertificateFuturecompletes. Runs synchronously on the polling thread, at most once; never after cancellation. - BoxCertificate
Future - Future returned by
SslContextBuilder::set_async_certificate_callback. It owns its inputs; it cannot retain a borrow of the TLS connection or request: - BoxCustom
Verify Finish - The type of callbacks returned by
BoxCustomVerifyFuturemethods. - BoxCustom
Verify Future - The type of futures to pass to
SslContextBuilder::set_async_custom_verify_callback. - BoxGet
Session Finish - The type of callbacks returned by
BoxSelectCertFuturemethods. - BoxGet
Session Future - The type of futures to pass to
SslContextBuilder::set_async_get_session_callback. - BoxPrivate
KeyMethod Finish - The type of callbacks returned by
BoxPrivateKeyMethodFuture. - BoxPrivate
KeyMethod Future - The type of futures returned by
AsyncPrivateKeyMethodmethods. - BoxSelect
Cert Finish - The type of callbacks returned by
BoxSelectCertFuturemethods. - BoxSelect
Cert Future - The type of futures to pass to
SslContextBuilder::set_async_select_certificate_callback. - ExData
Future - Convenience alias for futures stored in
Sslex data bySslContextBuildermethods.