
rustls v/0.23.44
TLS 1.2および1.3を実装した、Rust製のメモリ安全なTLSライブラリ。プラグイン可能な暗号プロバイダ、クライアント/サーバーモード、証明書ベースの認証を備えています。
RustlsはRustで書かれたモダンなTLSライブラリです。
ステータス
Rustlsは、多くの組織やプロジェクトで本番環境に使用されています。私たちは妥当なAPIサーフェスの安定性を維持することを目指していますが、新機能やパフォーマンス改善に対応するための変更に伴い、APIは進化する可能性があります。
将来の計画についてはロードマップがあります。また、パフォーマンスの後退を防ぎ、ターゲットとするハードウェア上でrustlsを評価できるようにするためのベンチマークもあります。
協力したい場合は、CONTRIBUTING.mdをご覧ください。
メンテナーは「rustls」をラスルズ(ラストTLSではなく)と発音しますが、それに強いこだわりがあるわけではありません。
変更履歴
各リリースの詳細な変更点の一覧は、https://github.com/rustls/rustls/releases で確認できます。
ドキュメント
アプローチ
Rustlsは、優れたレベルの暗号化セキュリティを提供することを目指し、そのセキュリティを達成するために設定を必要とせず、デフォルトでは安全でない機能や時代遅れの暗号化を提供しないTLSライブラリです。
Rustlsはクライアントとサーバーの両方でTLS1.2およびTLS1.3を実装しています。プロトコル機能の完全なリストをご覧ください。
プラットフォームサポート
Rustls自体はプラットフォームに依存しませんが、TLSで使用される暗号化アルゴリズムを実装するために暗号化プリミティブの使用が必要です。Rustlsでは、crypto::CryptoProviderが暗号化プリミティブ実装のコレクションを表します。
crypto::CryptoProvider構造体のカスタムインスタンスを提供することで、rustlsのすべての暗号化依存関係を置き換えることができます。これは、より幅広いアーキテクチャや環境への移植、またはコンプライアンス要件への対応手段となります。詳細については、crypto::CryptoProviderのドキュメントをご覧ください。
暗号化プロバイダー
Rustls 0.22以降、Rustlsが使用する暗号化プリミティブのプロバイダーを選択できるようになりました。これは、特定のプラットフォーム、コンプライアンス、または機能要件がある場合に魅力的かもしれません。
0.24以降、ユーザーはClientConfigまたはServerConfigインスタンスを構築する際に、暗号化プロバイダーを明示的に提供する必要があります。詳細については、crypto::CryptoProviderのドキュメントをご覧ください。
ファーストパーティプロバイダー
Rustlsプロジェクトは現在、2つの暗号化プロバイダーを保守しています:
rustls-aws-lc-rs- 暗号化にaws-lc-rsクレートを使用するプロバイダーです。このプロバイダーは一部のプラットフォームではビルドが難しい場合がありますが、優れたパフォーマンスと完全な機能セット(ポスト量子アルゴリズムを含む)を提供します。rustls-ring- 暗号化にringクレートを使用するプロバイダーです。このプロバイダーはさまざまなプラットフォームでビルドしやすいですが、機能セットはより限定的です(例えば、ポスト量子アルゴリズムには対応していません)。
Rustlsチームは、その完全な機能セットとパフォーマンスの観点からrustls-aws-lc-rsクレートの使用を推奨しています。aws-lc-rsのプラットフォーム/アーキテクチャサポートの制約の詳細については、aws-lc-rs FAQをご覧ください。
プロバイダーの選択方法の詳細については、crypto::CryptoProviderのドキュメントをご覧ください。
(0.24より前のrustlsバージョンでは、これらのプロバイダーは両方ともrustlsクレートの一部として同梱されており、Cargoのフィーチャーを使用して優先プロバイダーを選択していました。aws-lc-rsフィーチャーはデフォルトで有効になっていました。)
サードパーティプロバイダー
コミュニティはRustls向けのサードパーティプロバイダーの開発も開始しています:
boring-rustls-provider- 暗号化にboringsslを使用する、開発中のプロバイダーです。rustls-ccm- IoT/制約デバイス向けプロトコル(IEEE 2030.5、Matter、RFC 7925)のために、RustCryptoを使用してAES-CCM暗号スイート(TLS 1.2および1.3)を追加します。rustls-graviola- 暗号化にgraviolaを使用するプロバイダーです。rustls-mbedtls-provider- 暗号化にmbedtlsを使用するプロバイダーです。rustls-openssl- 暗号化にOpenSSLを使用するプロバイダーです。rustls-rustcrypto- 暗号化にRustCryptoの暗号化プリミティブを使用する実験的なプロバイダーです。rustls-symcrypt- MicrosoftのSymCryptライブラリを使用するプロバイダーです。rustls-wolfcrypt-provider- 暗号化にwolfCryptを使用する、開発中のプロバイダーです。
このトピックの詳細については、ドキュメントのMaking a custom CryptoProviderセクションをご覧ください。
サンプルコード
examplesディレクトリには、stream::Streamヘルパーを使用したI/Oの処理方法と、mioを使用したより複雑な非同期I/Oを示すデモが含まれています。非同期ランタイムにすでにTokioを使用している場合は、rustlsを直接操作する代わりにtokio-rustlsを使用する方がよいかもしれません。
mioベースのサンプルが最も完全で、以下で説明します。Rustlsに不慣れなユーザーは、より複雑なMIOサンプルに進む前に、シンプルなクライアント/サーバーのサンプルを確認することをお勧めします。
クライアントサンプルプログラム
MIOクライアントサンプルプログラムはtlsclient-mioという名前です。
サンプル実行例:
$ 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
(...)
その他のオプションについては、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 --port 8443 localhost
hello world
^C
その他のオプションについては、cargo run --bin tlsserver-mio -- --helpを実行してください。
ライセンス
Rustlsは以下の3つのライセンスの下で配布されています:
- Apache License バージョン 2.0。
- MITライセンス。
- ISCライセンス。
これらはそれぞれLICENSE-APACHE、LICENSE-MIT、LICENSE-ISCとして含まれています。このソフトウェアは、これらのライセンスのいずれかの条件の下で、お客様の選択により使用できます。
プロジェクトメンバー
- Joe Birr-Pixton(@ctz、プロジェクト創設者 - Prossimoによりフルタイムで資金提供)
- Dirkjan Ochtman(@djc、共同メンテナー)
- Daniel McCarney(@cpu、共同メンテナー)
- Josh Aas(@bdaehlie、プロジェクト管理)
行動規範
このプロジェクトはRust行動規範を採用しています。不正行為を報告する場合、または行動規範に関するコメントや質問がある場合は、[email protected]までメールをお送りください。