
rustls v/0.23.44
Libreria TLS memory-safe in Rust che implementa TLS 1.2 e 1.3 con provider crittografici pluggable, modalità client/server e autenticazione basata su certificati.
Rustls è una moderna libreria TLS scritta in Rust.
Stato
Rustls è usato in produzione in molte organizzazioni e progetti. Miriamo a mantenere una ragionevole stabilità della superficie API, ma l'API potrebbe evolversi man mano che apportiamo modifiche per introdurre nuove funzionalità o miglioramenti delle prestazioni.
Abbiamo una roadmap per i nostri piani futuri. Abbiamo anche benchmark per prevenire regressioni delle prestazioni e per permetterti di valutare rustls sul tuo hardware di riferimento.
Se desideri contribuire, consulta CONTRIBUTING.md.
I maintainer pronunciano "rustls" come rustles (piuttosto che rust-TLS), ma non abbiamo una forte opinione al riguardo.
Changelog
L'elenco dettagliato delle modifiche di ogni release è disponibile su https://github.com/rustls/rustls/releases.
Documentazione
Approccio
Rustls è una libreria TLS che mira a fornire un buon livello di sicurezza crittografica, non richiede alcuna configurazione per raggiungere tale sicurezza e non fornisce funzionalità non sicure né crittografia obsoleta per impostazione predefinita.
Rustls implementa TLS1.2 e TLS1.3 sia per i client che per i server. Vedi l'elenco completo delle funzionalità di protocollo.
Supporto di piattaforma
Sebbene Rustls stesso sia indipendente dalla piattaforma, richiede l'uso di primitive crittografiche
per implementare gli algoritmi crittografici utilizzati in TLS. In Rustls, un
crypto::CryptoProvider rappresenta una raccolta di implementazioni di primitive crittografiche.
Fornendo un'istanza personalizzata della struct crypto::CryptoProvider, puoi
sostituire tutte le dipendenze crittografiche di rustls. Questa è una via per essere portabili
su un insieme più ampio di architetture e ambienti, o per soddisfare requisiti di conformità. Vedi la
documentazione di crypto::CryptoProvider per maggiori dettagli.
Provider crittografici
A partire da Rustls 0.22 è stato possibile scegliere il provider delle primitive crittografiche utilizzate da Rustls. Questo può essere interessante se hai requisiti specifici di piattaforma, conformità o funzionalità.
Dalla versione 0.24, gli utenti devono fornire esplicitamente un provider crittografico quando costruiscono istanze di ClientConfig o
ServerConfig. Vedi la documentazione di crypto::CryptoProvider per maggiori dettagli.
Provider di prima parte
Il progetto Rustls mantiene attualmente due provider crittografici:
rustls-aws-lc-rs- un provider che utilizza la crateaws-lc-rsper la crittografia. Sebbene questo provider possa essere più difficile da compilare su alcune piattaforme, offre prestazioni eccellenti e un set completo di funzionalità (inclusi gli algoritmi post-quantistici).rustls-ring- un provider che utilizza la crateringper la crittografia. Questo provider è più facile da compilare su diverse piattaforme, ma ha un set di funzionalità più limitato (ad esempio, non supporta gli algoritmi post-quantistici).
Il team di Rustls consiglia di utilizzare la crate rustls-aws-lc-rs per il suo set completo di funzionalità
e le sue prestazioni. Vedi le FAQ di aws-lc-rs per maggiori dettagli sui
vincoli di supporto piattaforma/architettura in aws-lc-rs.
Vedi la documentazione di crypto::CryptoProvider per i dettagli su come vengono selezionati i provider.
(Per le versioni di rustls precedenti alla 0.24, entrambi questi provider erano distribuiti come parte della crate rustls,
e le feature di Cargo venivano utilizzate per selezionare il provider preferito. La feature aws-lc-rs
era abilitata per impostazione predefinita.)
Provider di terze parti
Anche la community ha iniziato a sviluppare provider di terze parti per Rustls:
boring-rustls-provider- un provider in lavorazione che utilizzaboringsslper la crittografia.rustls-ccm- aggiunge suite di cifratura AES-CCM (TLS 1.2 e 1.3) utilizzandoRustCrypto, per protocolli IoT/dispositivi con risorse limitate (IEEE 2030.5, Matter, RFC 7925).rustls-graviola- un provider che utilizzagraviolaper la crittografia.rustls-mbedtls-provider- un provider che utilizzambedtlsper la crittografia.rustls-openssl- un provider che utilizza OpenSSL per la crittografia.rustls-rustcrypto- un provider sperimentale che utilizza le primitive crittografiche daRustCryptoper la crittografia.rustls-symcrypt- un provider che utilizza la libreria SymCrypt di Microsoft.rustls-wolfcrypt-provider- un provider in lavorazione che utilizzawolfCryptper la crittografia.
Vedi la sezione Creare un CryptoProvider personalizzato della documentazione per maggiori informazioni su questo argomento.
Codice di esempio
La nostra directory esempi contiene demo che mostrano come gestire l'I/O usando l'helper
stream::Stream, oltre a un I/O asincrono più complesso usando mio.
Se stai già usando Tokio come runtime asincrono, potresti preferire usare
tokio-rustls invece di interagire direttamente con rustls.
Gli esempi basati su mio sono i più completi e vengono discussi di seguito. Gli utenti
che si avvicinano per la prima volta a Rustls potrebbero preferire esaminare i semplici esempi client/server prima
di addentrarsi negli esempi MIO più complessi.
Programma di esempio client
Il programma di esempio client MIO si chiama tlsclient-mio.
Alcuni esempi di esecuzione:
$ cargo run --bin tlsclient-mio -- --http jbp.io
HTTP/1.1 200 OK
Date: Tue, 23 Jun 2026 16:13:40 GMT
Content-Type: text/html; charset=utf-8
Connection: close
(...)
Esegui cargo run --bin tlsclient-mio -- --help per ulteriori opzioni.
Programma di esempio server
Il programma di esempio server MIO si chiama tlsserver-mio.
Ecco un esempio di esecuzione; avviamo un server echo TLS, quindi ci colleghiamo ad esso con
openssl e tlsclient-mio:
$ cargo run --bin tlsserver-mio -- --certs test-ca/rsa-2048/end.fullchain --key test-ca/rsa-2048/end.key -p 8443 echo &
$ echo hello world | openssl s_client -ign_eof -quiet -connect localhost:8443
depth=2 CN = ponytown RSA CA
verify error:num=19:self signed certificate in certificate chain
hello world
^C
$ echo hello world | cargo run --bin tlsclient-mio -- --cafile test-ca/rsa-2048/ca.cert --port 8443 localhost
hello world
^C
Esegui cargo run --bin tlsserver-mio -- --help per ulteriori opzioni.
Licenza
Rustls è distribuito sotto le seguenti tre licenze:
- Apache License versione 2.0.
- Licenza MIT.
- Licenza ISC.
Questi sono inclusi rispettivamente come LICENSE-APACHE, LICENSE-MIT e LICENSE-ISC. Puoi utilizzare questo software secondo i termini di una qualsiasi di queste licenze, a tua scelta.
Membri del progetto
- Joe Birr-Pixton (@ctz, Fondatore del progetto - finanziato a tempo pieno da Prossimo)
- Dirkjan Ochtman (@djc, Co-maintainer)
- Daniel McCarney (@cpu, Co-maintainer)
- Josh Aas (@bdaehlie, Gestione del progetto)
Codice di condotta
Questo progetto adotta il Codice di condotta di Rust. Invia un'email a [email protected] per segnalare qualsiasi episodio di cattiva condotta, o se hai commenti o domande sul Codice di condotta.