Torna agli aggiornamenti
New releaseSep 8, 2026

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.

Condividi

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.

Build Status Coverage Status (codecov.io) Documentation Chat OpenSSF Best Practices

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

https://docs.rs/rustls/

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 crate aws-lc-rs per 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 crate ring per 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:

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.

Categorie