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 本身是獨立於平台的,但預設情況下它使用aws-lc-rs
來實現 TLS 中的加密。有關 aws-lc-rs 中平台/架構支援限制的更多詳細信息,請參閱 aws-lc-rs 常見問題解答。
也可以透過ring
crate 功能使用ring
:請參閱支援的ring
目標平台。
透過提供crypto::CryptoProvider
結構的自訂實例,您可以取代 rustls 的所有加密依賴項。這是可移植到更廣泛的架構和環境或合規性要求的途徑。有關更多詳細信息,請參閱crypto::CryptoProvider
文件。
依賴 rustls 時指定default-features = false
將刪除對 aws-lc-rs 的依賴。
Rustls 需要 Rust 1.63 或更高版本。它對 zlib-rs 有一個可選的依賴項,需要 1.75 或更高版本。
從 Rustls 0.22 開始,可以選擇 Rustls 使用的加密原語的提供者。如果您有預設提供者aws-lc-rs
無法滿足的特定平台、合規性或功能要求,這可能會很有吸引力。
希望自訂正在使用的提供者的使用者可以在各自的配置產生器類型上使用with_crypto_provider
方法建構ClientConfig
和ServerConfig
實例時這樣做。有關更多詳細信息,請參閱crypto::CryptoProvider
文件。
Rustls 附帶了兩個由相關功能標誌控制的內建提供者:
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 用於非同步運行時,您可能會喜歡使用tokio-rustls
而不是直接與 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 echo 伺服器,然後使用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 根據以下三個授權分發:
它們分別包含為 LICENSE-APACHE、LICENSE-MIT 和 LICENSE-ISC。您可以選擇根據任何這些許可的條款使用本軟體。
本項目採用 Rust 行為準則。如果您對行為準則有任何意見或疑問,請發送電子郵件至 [email protected] 舉報任何不當行為。