Rustls は、Rust で書かれた最新の TLS ライブラリです。
Rustls は、多くの組織やプロジェクトの運用環境で使用されています。 API 表面の合理的な安定性を維持することを目指していますが、新しい機能やパフォーマンスの向上に対応するための変更が加えられると、API が進化する可能性があります。
私たちは将来の計画に向けたロードマップを持っています。また、パフォーマンスの低下を防止し、ターゲット ハードウェアで Rustl を評価できるベンチマークもあります。
ご協力いただける場合は、CONTRIBUTING.md をご覧ください。
各リリースの変更点の詳細なリストは、https://github.com/rustls/rustls/releases でご覧いただけます。
https://docs.rs/rustls/
Rustls は、適切なレベルの暗号化セキュリティを提供することを目的とした TLS ライブラリであり、そのセキュリティを達成するための構成は必要なく、デフォルトでは安全でない機能や時代遅れの暗号化を提供しません。
Rustls はクライアントとサーバーの両方に TLS1.2 と TLS1.3 を実装します。プロトコル機能の完全なリストを参照してください。
Rustls 自体はプラットフォームに依存しませんが、デフォルトでは TLS での暗号化の実装にaws-lc-rs
使用します。 aws-lc-rs のプラットフォーム/アーキテクチャのサポート制約の詳細については、aws-lc-rs FAQ を参照してください。
ring
、 ring
クレート機能経由でも利用できます。サポートされているring
ターゲット プラットフォームを参照してください。
crypto::CryptoProvider
構造体のカスタム インスタンスを提供することにより、rustl のすべての暗号化依存関係を置き換えることができます。これは、より幅広いアーキテクチャや環境、またはコンプライアンス要件に移植できるようにするための手段です。詳細については、 crypto::CryptoProvider
ドキュメントを参照してください。
Rustls に依存する場合に、 default-features = false
指定すると、aws-lc-rs への依存関係が削除されます。
Rustls には Rust 1.63 以降が必要です。 zlib-rs へのオプションの依存関係があり、1.75 以降が必要です。
Rustls 0.22 以降、Rustls が使用する暗号化プリミティブのプロバイダーを選択できるようになりました。これは、デフォルトのプロバイダーであるaws-lc-rs
では満たされない特定のプラットフォーム、コンプライアンス、または機能の要件がある場合に魅力的である可能性があります。
使用中のプロバイダーをカスタマイズしたいユーザーは、 ClientConfig
とServerConfig
インスタンスを構築するときに、それぞれの構成ビルダー タイプでwith_crypto_provider
メソッドを使用してカスタマイズできます。詳細については、 crypto::CryptoProvider
ドキュメントを参照してください。
Rustls には、関連する機能フラグで制御される 2 つの組み込みプロバイダーが同梱されています。
aws-lc-rs
- デフォルトで有効になっており、 aws_lc_rs
機能フラグを有効にすると利用可能になります。ring
- ring
機能フラグが有効になっている場合に使用できます。プロバイダーの選択方法の詳細については、 crypto::CryptoProvider
のドキュメントを参照してください。
コミュニティは、Rustls 用のサードパーティ プロバイダーの開発も開始しました。
rustls-mbedtls-provider
- 暗号化にmbedtls
使用するプロバイダー。boring-rustls-provider
- 暗号化にboringssl
使用する開発中のプロバイダー。rustls-rustcrypto
- 暗号化にRustCrypto
の暗号プリミティブを使用する実験的なプロバイダー。rustls-post-quantum
: デフォルトの aws-lc-rs プロバイダーにポスト量子キー交換のサポートを追加する実験的なプロバイダー。rustls-wolfcrypt-provider
- 暗号化にwolfCrypt
使用する開発中のプロバイダー。 custom-provider
例では、独自のプロバイダーを作成する簡単な例も提供します。この例では、 RustCrypto
エコシステムの一部を使用して最小限のプロバイダーを実装します。
このトピックの詳細については、ドキュメントの「カスタム CryptoProvider の作成」セクションを参照してください。
サンプル ディレクトリには、 stream::Stream
ヘルパーを使用して I/O を処理する方法と、 mio
を使用したより複雑な非同期 I/O を処理する方法を示すデモが含まれています。すでに非同期ランタイムに Tokio を使用している場合は、rustl と直接対話する代わりにtokio-rustls
を使用することをお勧めします。
mio
ベースの例は最も完全なものであり、以下で説明します。 Rustls を初めて使用するユーザーは、より複雑な MIO の例に入る前に、単純なクライアント/サーバーの例を参照することを好むかもしれません。
MIO クライアントのサンプル プログラムの名前はtlsclient-mio
です。
いくつかのサンプルを実行します。
$ 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
(...)
または
$ cargo run --bin tlsclient-mio -- --http expired.badssl.com
TLS error: InvalidCertificate(Expired)
Connection closed
その他のオプションについては、 cargo run --bin tlsclient-mio -- --help
を実行してください。
MIO サーバーのサンプル プログラムの名前はtlsserver-mio
です。
以下にサンプルの実行例を示します。 TLS エコー サーバーを起動し、 openssl
と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
その他のオプションについては、 cargo run --bin tlsserver-mio -- --help
を実行してください。
Rustls は次の 3 つのライセンスに基づいて配布されます。
これらは、それぞれ LICENSE-APACHE、LICENSE-MIT、および LICENSE-ISC として含まれます。お客様は、お客様の選択により、これらのライセンスの条件に基づいてこのソフトウェアを使用することができます。
このプロジェクトは Rust の行動規範を採用しています。不正行為の事例を報告する場合、または行動規範に関するコメントや質問がある場合は、[email protected] に電子メールを送信してください。