Rustls est une bibliothèque TLS moderne écrite en Rust.
Rustls est utilisé en production dans de nombreuses organisations et projets. Notre objectif est de maintenir une stabilité raisonnable de la surface de l'API, mais l'API peut évoluer à mesure que nous apportons des modifications pour s'adapter à de nouvelles fonctionnalités ou à des améliorations de performances.
Nous avons une feuille de route pour nos projets futurs. Nous disposons également de benchmarks pour éviter les régressions de performances et pour vous permettre d'évaluer les rustls sur votre matériel cible.
Si vous souhaitez aider, veuillez consulter CONTRIBUTING.md.
La liste détaillée des modifications apportées à chaque version est disponible sur https://github.com/rustls/rustls/releases.
https://docs.rs/rustls/
Rustls est une bibliothèque TLS qui vise à fournir un bon niveau de sécurité cryptographique, ne nécessite aucune configuration pour atteindre cette sécurité et ne fournit aucune fonctionnalité dangereuse ni cryptographie obsolète par défaut.
Rustls implémente TLS1.2 et TLS1.3 pour les clients et les serveurs. Consultez la liste complète des fonctionnalités du protocole.
Bien que Rustls lui-même soit indépendant de la plate-forme, il utilise par défaut aws-lc-rs
pour implémenter la cryptographie dans TLS. Consultez la FAQ aws-lc-rs pour plus de détails sur les contraintes de prise en charge de la plate-forme/architecture dans aws-lc-rs.
ring
est également disponible via la fonction ring
crate : voir les plates-formes cibles ring
prises en charge.
En fournissant une instance personnalisée de la structure crypto::CryptoProvider
, vous pouvez remplacer toutes les dépendances cryptographiques de rustls. Il s’agit d’un moyen d’être portable vers un ensemble plus large d’architectures et d’environnements, ou d’exigences de conformité. Consultez la documentation crypto::CryptoProvider
pour plus de détails.
Spécifier default-features = false
en fonction de rustls supprimera la dépendance sur aws-lc-rs.
Rustls nécessite Rust 1.63 ou version ultérieure. Il a une dépendance facultative sur zlib-rs qui nécessite la version 1.75 ou ultérieure.
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 plate-forme, de conformité ou de fonctionnalités qui ne sont pas satisfaites par le fournisseur par défaut, aws-lc-rs
.
Les utilisateurs qui souhaitent personnaliser le fournisseur utilisé peuvent le faire lors de la construction d'instances ClientConfig
et ServerConfig
à l'aide de la méthode with_crypto_provider
sur les types de générateur de configuration respectifs. Consultez la documentation crypto::CryptoProvider
pour plus de détails.
Rustls est livré avec deux fournisseurs intégrés contrôlés avec des indicateurs de fonctionnalités associés :
aws-lc-rs
- activé par défaut, disponible avec l'indicateur de fonctionnalité aws_lc_rs
activé.ring
- disponible avec l'indicateur de fonctionnalité ring
activé. Consultez la documentation de crypto::CryptoProvider
pour plus de détails sur la façon dont les fournisseurs sont sélectionnés.
La communauté a également commencé à développer des fournisseurs tiers pour Rustls :
rustls-mbedtls-provider
- un fournisseur qui utilise mbedtls
pour la cryptographie.boring-rustls-provider
- un fournisseur de travaux en cours qui utilise boringssl
pour la cryptographie.rustls-rustcrypto
- un fournisseur expérimental qui utilise les primitives crypto de RustCrypto
pour la cryptographie.rustls-post-quantum
: un fournisseur expérimental qui ajoute la prise en charge de l'échange de clés post-quantique au fournisseur aws-lc-rs par défaut.rustls-wolfcrypt-provider
- un fournisseur en cours de travail qui utilise wolfCrypt
pour la cryptographie. Nous fournissons également un exemple simple d’écriture de votre propre fournisseur dans l’exemple custom-provider
. Cet exemple implémente un fournisseur minimal utilisant des parties de l'écosystème RustCrypto
.
Consultez la section Création d'un CryptoProvider personnalisé de la documentation pour plus d'informations sur ce sujet.
Notre répertoire d'exemples contient des démos qui montrent comment gérer les E/S à l'aide de l'assistant stream::Stream
, ainsi que des E/S asynchrones plus complexes à l'aide mio
. Si vous utilisez déjà Tokio pour un runtime asynchrone, vous préférerez peut-être utiliser tokio-rustls
au lieu d'interagir directement avec rustls.
Les exemples basés sur mio
sont les plus complets et discutés ci-dessous. Les utilisateurs qui découvrent Rustls préféreront peut-être examiner les exemples client/serveur simples avant de se plonger dans les exemples MIO plus complexes.
L'exemple de programme client MIO s'appelle tlsclient-mio
.
Quelques exemples d'exécutions :
$ cargo run --bin tlsclient-mio -- --http mozilla-modern.badssl.com
HTTP/1.1 200 OK
Server: nginx/1.6.2 (Ubuntu)
Date: Wed, 01 Jun 2016 18:44:00 GMT
Content-Type: text/html
Content-Length: 644
(...)
ou
$ cargo run --bin tlsclient-mio -- --http expired.badssl.com
TLS error: InvalidCertificate(Expired)
Connection closed
Exécutez cargo run --bin tlsclient-mio -- --help
pour plus d'options.
L'exemple de programme du serveur MIO s'appelle tlsserver-mio
.
Voici un exemple d'exécution ; on démarre un serveur d'écho TLS, puis on s'y connecte 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 -p 8443 localhost
hello world
^C
Exécutez cargo run --bin tlsserver-mio -- --help
pour plus d'options.
Rustls est distribué sous les trois licences suivantes :
Ceux-ci sont respectivement inclus sous les noms LICENSE-APACHE, LICENSE-MIT et LICENSE-ISC. Vous pouvez utiliser ce logiciel selon les termes de l'une de ces licences, à votre discrétion.
Ce projet adopte le code de conduite Rust. Veuillez envoyer un e-mail à [email protected] pour signaler tout cas de mauvaise conduite ou si vous avez des commentaires ou des questions sur le code de conduite.