Rustls ist eine moderne TLS-Bibliothek, die in Rust geschrieben ist.
Rustls wird in der Produktion vieler Organisationen und Projekte eingesetzt. Unser Ziel ist es, eine angemessene Stabilität der API-Oberfläche aufrechtzuerhalten. Die API kann sich jedoch weiterentwickeln, wenn wir Änderungen vornehmen, um neue Funktionen oder Leistungsverbesserungen zu berücksichtigen.
Wir haben einen Fahrplan für unsere Zukunftspläne. Wir verfügen auch über Benchmarks, um Leistungsrückgänge zu verhindern und Ihnen die Möglichkeit zu geben, das Rauschen auf Ihrer Zielhardware auszuwerten.
Wenn Sie helfen möchten, besuchen Sie bitte CONTRIBUTING.md.
Die detaillierte Liste der Änderungen in jeder Version finden Sie unter https://github.com/rustls/rustls/releases.
https://docs.rs/rustls/
Rustls ist eine TLS-Bibliothek, die darauf abzielt, ein gutes Maß an kryptografischer Sicherheit zu bieten, keine Konfiguration erfordert, um diese Sicherheit zu erreichen, und standardmäßig keine unsicheren Funktionen oder veraltete Kryptografie bereitstellt.
Rustls implementiert TLS1.2 und TLS1.3 sowohl für Clients als auch für Server. Sehen Sie sich die vollständige Liste der Protokollfunktionen an.
Während Rustls selbst plattformunabhängig ist, verwendet es standardmäßig aws-lc-rs
für die Implementierung der Kryptografie in TLS. Weitere Informationen zu den Einschränkungen der Plattform-/Architekturunterstützung in aws-lc-rs finden Sie in den FAQ zu aws-lc-rs.
ring
ist auch über die ring
Crate-Funktion verfügbar: Sehen Sie sich die unterstützten ring
Zielplattformen an.
Durch die Bereitstellung einer benutzerdefinierten Instanz der crypto::CryptoProvider
-Struktur können Sie alle Kryptografieabhängigkeiten von Rustls ersetzen. Dies ist ein Weg zur Portabilität auf eine breitere Palette von Architekturen und Umgebungen oder Compliance-Anforderungen. Weitere Informationen finden Sie in der Dokumentation crypto::CryptoProvider
.
Durch die Angabe von default-features = false
bei Abhängigkeit von Rustls wird die Abhängigkeit von „aws-lc-rs“ entfernt.
Rustls erfordert Rust 1.63 oder höher. Es besteht eine optionale Abhängigkeit von zlib-rs, die 1.75 oder höher erfordert.
Seit Rustls 0.22 ist es möglich, den Anbieter der von Rustls verwendeten kryptografischen Grundelemente auszuwählen. Dies kann interessant sein, wenn Sie bestimmte Plattform-, Compliance- oder Funktionsanforderungen haben, die vom Standardanbieter aws-lc-rs
nicht erfüllt werden.
Benutzer, die den verwendeten Anbieter anpassen möchten, können dies beim Erstellen von ClientConfig
und ServerConfig
Instanzen mithilfe der Methode with_crypto_provider
für die jeweiligen Konfigurations-Builder-Typen tun. Weitere Informationen finden Sie in der Dokumentation crypto::CryptoProvider
.
Rustls wird mit zwei integrierten Anbietern ausgeliefert, die mit zugehörigen Feature-Flags gesteuert werden:
aws-lc-rs
– standardmäßig aktiviert, verfügbar mit aktiviertem aws_lc_rs
-Feature-Flag.ring
– verfügbar, wenn das ring
-Feature-Flag aktiviert ist. Weitere Informationen zur Auswahl von Anbietern finden Sie in der Dokumentation zu crypto::CryptoProvider
.
Die Community hat auch damit begonnen, Drittanbieter für Rustls zu entwickeln:
rustls-mbedtls-provider
– ein Anbieter, der mbedtls
für die Kryptografie verwendet.boring-rustls-provider
– ein in Arbeit befindlicher Anbieter, der boringssl
für die Kryptografie verwendet.rustls-rustcrypto
– ein experimenteller Anbieter, der die Kryptoprimitive von RustCrypto
für die Kryptografie verwendet.rustls-post-quantum
: ein experimenteller Anbieter, der dem Standardanbieter aws-lc-rs Unterstützung für Post-Quantum-Schlüsselaustausch hinzufügt.rustls-wolfcrypt-provider
– ein in Arbeit befindlicher Anbieter, der wolfCrypt
für die Kryptografie verwendet. Wir bieten auch ein einfaches Beispiel für das Schreiben Ihres eigenen Anbieters im Beispiel custom-provider
. Dieses Beispiel implementiert einen Minimalanbieter unter Verwendung von Teilen des RustCrypto
Ökosystems.
Weitere Informationen zu diesem Thema finden Sie im Abschnitt Erstellen eines benutzerdefinierten CryptoProviders der Dokumentation.
Unser Beispielverzeichnis enthält Demos, die zeigen, wie E/A mit dem Helfer stream::Stream
sowie komplexere asynchrone E/A mit mio
verarbeitet werden. Wenn Sie Tokio bereits für eine asynchrone Laufzeit verwenden, bevorzugen Sie möglicherweise tokio-rustls
anstatt direkt mit rustls zu interagieren.
Die mio
-basierten Beispiele sind die umfassendsten und werden im Folgenden besprochen. Benutzer, die Rustls noch nicht kennen, schauen sich vielleicht lieber die einfachen Client/Server-Beispiele an, bevor sie sich mit den komplexeren MIO-Beispielen befassen.
Das MIO-Client-Beispielprogramm heißt tlsclient-mio
.
Einige Beispielläufe:
$ 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
(...)
oder
$ cargo run --bin tlsclient-mio -- --http expired.badssl.com
TLS error: InvalidCertificate(Expired)
Connection closed
Führen Sie cargo run --bin tlsclient-mio -- --help
aus, um weitere Optionen anzuzeigen.
Das MIO-Server-Beispielprogramm heißt tlsserver-mio
.
Hier ist ein Beispiellauf; Wir starten einen TLS-Echoserver und verbinden uns dann mit openssl
und tlsclient-mio
mit ihm:
$ 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
Führen Sie cargo run --bin tlsserver-mio -- --help
aus, um weitere Optionen zu erhalten.
Rustls wird unter den folgenden drei Lizenzen vertrieben:
Diese sind als LICENSE-APACHE, LICENSE-MIT bzw. LICENSE-ISC enthalten. Sie können diese Software nach eigenem Ermessen unter den Bedingungen einer dieser Lizenzen nutzen.
Dieses Projekt übernimmt den Rust-Verhaltenskodex. Bitte senden Sie eine E-Mail an [email protected], um Fehlverhalten zu melden oder wenn Sie Kommentare oder Fragen zum Verhaltenskodex haben.