
rustls v/0.23.44
Bibliothèque TLS à sûreté mémoire écrite en Rust, implémentant TLS 1.2 et 1.3 avec des fournisseurs cryptographiques enfichables, des modes client/serveur et une authentification par certificats.
Rustls est une bibliothèque TLS moderne écrite en Rust.
Statut
Rustls est utilisé en production dans de nombreuses organisations et projets. Nous visons à maintenir une stabilité raisonnable de la surface d'API, mais celle-ci peut évoluer à mesure que nous apportons des modifications pour accueillir de nouvelles fonctionnalités ou améliorations de performances.
Nous avons une feuille de route pour nos futurs projets. Nous disposons également de benchmarks pour prévenir les régressions de performances et vous permettre d'évaluer rustls sur votre matériel cible.
Si vous souhaitez contribuer, veuillez consulter CONTRIBUTING.md.
Les mainteneurs prononcent "rustls" comme rustles (plutôt que rust-TLS), mais nous n'avons pas d'opinion tranchée à ce sujet.
Journal des modifications
La liste détaillée des changements de chaque version est disponible à l'adresse https://github.com/rustls/rustls/releases.
Documentation
Approche
Rustls est une bibliothèque TLS qui vise à offrir un bon niveau de sécurité cryptographique, ne nécessite aucune configuration pour atteindre cette sécurité et ne fournit par défaut aucune fonctionnalité unsafe ni cryptographie obsolète.
Rustls implémente TLS1.2 et TLS1.3 pour les clients comme pour les serveurs. Voir la liste complète des fonctionnalités du protocole.
Prise en charge des plateformes
Bien que Rustls soit indépendant de la plateforme, il nécessite l'utilisation de primitives
cryptographiques pour implémenter les algorithmes cryptographiques utilisés dans TLS. Dans Rustls, un
crypto::CryptoProvider représente un ensemble d'implémentations de primitives cryptographiques.
En fournissant une instance personnalisée de la structure crypto::CryptoProvider, vous
pouvez remplacer toutes les dépendances cryptographiques de rustls. C'est une voie vers la portabilité
sur un plus large éventail d'architectures et d'environnements, ou vers le respect d'exigences de
conformité. Voir la documentation de crypto::CryptoProvider pour plus de détails.
Fournisseurs cryptographiques
Depuis Rustls 0.22, il est possible de choisir le fournisseur des primitives cryptographiques utilisées par Rustls. Cela peut être intéressant si vous avez des exigences spécifiques en matière de plateforme, de conformité ou de fonctionnalités.
Depuis la version 0.24, les utilisateurs doivent fournir explicitement un fournisseur cryptographique lors de la construction des instances ClientConfig ou
ServerConfig. Voir la documentation de crypto::CryptoProvider pour plus de détails.
Fournisseurs de première partie
Le projet Rustls maintient actuellement deux fournisseurs cryptographiques :
rustls-aws-lc-rs- un fournisseur qui utilise la crateaws-lc-rspour la cryptographie. Bien que ce fournisseur puisse être plus difficile à compiler sur certaines plateformes, il offre d'excellentes performances et un ensemble de fonctionnalités complet (y compris des algorithmes post-quantiques).rustls-ring- un fournisseur qui utilise la crateringpour la cryptographie. Ce fournisseur est plus facile à compiler sur diverses plateformes, mais son ensemble de fonctionnalités est plus limité (par exemple, il ne prend pas en charge les algorithmes post-quantiques).
L'équipe Rustls recommande d'utiliser la crate rustls-aws-lc-rs pour son ensemble de fonctionnalités complet
et ses performances. Voir la FAQ aws-lc-rs pour plus de détails sur les
contraintes de prise en charge des plateformes/architectures dans aws-lc-rs.
Voir la documentation de crypto::CryptoProvider pour plus de détails sur la façon dont les fournisseurs sont
sélectionnés.
(Pour les versions de rustls antérieures à 0.24, ces deux fournisseurs étaient inclus dans la crate rustls,
et des fonctionnalités Cargo étaient utilisées pour sélectionner le fournisseur préféré. La fonctionnalité aws-lc-rs
était activée par défaut.)
Fournisseurs tiers
La communauté a également commencé à développer des fournisseurs tiers pour Rustls :
boring-rustls-provider- un fournisseur en cours de développement qui utiliseboringsslpour la cryptographie.rustls-ccm- ajoute des suites de chiffrement AES-CCM (TLS 1.2 et 1.3) utilisantRustCrypto, pour les protocoles IoT/appareils contraints (IEEE 2030.5, Matter, RFC 7925).rustls-graviola- un fournisseur qui utilisegraviolapour la cryptographie.rustls-mbedtls-provider- un fournisseur qui utilisembedtlspour la cryptographie.rustls-openssl- un fournisseur qui utilise OpenSSL pour la cryptographie.rustls-rustcrypto- un fournisseur expérimental qui utilise les primitives cryptographiques deRustCryptopour la cryptographie.rustls-symcrypt- un fournisseur qui utilise la bibliothèque SymCrypt de Microsoft.rustls-wolfcrypt-provider- un fournisseur en cours de développement qui utilisewolfCryptpour la cryptographie.
Voir la section Création d'un CryptoProvider personnalisé de la documentation pour plus d'informations sur ce sujet.
Exemples de code
Notre répertoire examples contient des démos qui montrent comment gérer les entrées/sorties à l'aide de
l'assistant stream::Stream, ainsi que des entrées/sorties asynchrones plus complexes utilisant mio.
Si vous utilisez déjà Tokio comme runtime asynchrone, vous préférerez peut-être utiliser
tokio-rustls plutôt que d'interagir directement avec rustls.
Les exemples basés sur mio sont les plus complets et sont présentés ci-dessous. Les nouveaux
utilisateurs de Rustls préféreront peut-être examiner les exemples simples de client/serveur avant
de se plonger dans les exemples MIO plus complexes.
Programme d'exemple du client
Le programme d'exemple du client MIO s'appelle tlsclient-mio.
Quelques exemples d'exécution :
$ 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
(...)
Exécutez cargo run --bin tlsclient-mio -- --help pour plus d'options.
Programme d'exemple du serveur
Le programme d'exemple du serveur MIO s'appelle tlsserver-mio.
Voici un exemple d'exécution ; nous démarrons un serveur d'écho TLS, puis nous nous y connectons avec
openssl et 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
Exécutez cargo run --bin tlsserver-mio -- --help pour plus d'options.
Licence
Rustls est distribué sous les trois licences suivantes :
- Apache License version 2.0.
- Licence MIT.
- Licence ISC.
Elles sont incluses respectivement sous les noms LICENSE-APACHE, LICENSE-MIT et LICENSE-ISC. Vous pouvez utiliser ce logiciel selon les termes de l'une ou l'autre de ces licences, à votre choix.
Membres du projet
- Joe Birr-Pixton (@ctz, Fondateur du projet - financé à plein temps par Prossimo)
- Dirkjan Ochtman (@djc, Co-mainteneur)
- Daniel McCarney (@cpu, Co-mainteneur)
- Josh Aas (@bdaehlie, Gestion de projet)
Code de conduite
Ce projet adopte le Code de conduite de Rust. Veuillez envoyer un e-mail à [email protected] pour signaler tout cas de comportement inapproprié, ou si vous avez des commentaires ou des questions sur le Code de conduite.