Rustls adalah perpustakaan TLS modern yang ditulis dalam Rust.
Rustls digunakan dalam produksi di banyak organisasi dan proyek. Kami bertujuan untuk menjaga stabilitas permukaan API yang wajar, namun API dapat berkembang seiring dengan perubahan yang kami lakukan untuk mengakomodasi fitur baru atau peningkatan kinerja.
Kami memiliki peta jalan untuk rencana masa depan kami. Kami juga memiliki tolok ukur untuk mencegah regresi kinerja dan memungkinkan Anda mengevaluasi gangguan pada perangkat keras target Anda.
Jika Anda ingin membantu, silakan lihat CONTRIBUTING.md.
Daftar detail perubahan di setiap rilis dapat ditemukan di https://github.com/rustls/rustls/releases.
https://docs.rs/rustls/
Rustls adalah perpustakaan TLS yang bertujuan untuk memberikan tingkat keamanan kriptografi yang baik, tidak memerlukan konfigurasi untuk mencapai keamanan tersebut, dan tidak menyediakan fitur yang tidak aman atau kriptografi usang secara default.
Rustls mengimplementasikan TLS1.2 dan TLS1.3 untuk klien dan server. Lihat daftar lengkap fitur protokol.
Meskipun Rustls sendiri tidak bergantung pada platform, secara default Rustls menggunakan aws-lc-rs
untuk mengimplementasikan kriptografi di TLS. Lihat FAQ aws-lc-rs untuk detail selengkapnya tentang batasan dukungan platform/arsitektur di aws-lc-rs.
ring
juga tersedia melalui fitur peti ring
: lihat platform target ring
yang didukung.
Dengan menyediakan instance khusus dari struct crypto::CryptoProvider
, Anda dapat mengganti semua dependensi kriptografi dari Rustls. Ini adalah cara untuk menjadi portabel bagi rangkaian arsitektur dan lingkungan yang lebih luas, atau persyaratan kepatuhan. Lihat dokumentasi crypto::CryptoProvider
untuk lebih jelasnya.
Menentukan default-features = false
ketika bergantung pada rustics akan menghilangkan ketergantungan pada aws-lc-rs.
Rustls membutuhkan Rust 1.63 atau lebih baru. Ini memiliki ketergantungan opsional pada zlib-rs yang membutuhkan 1,75 atau lebih baru.
Sejak Rustls 0.22 dimungkinkan untuk memilih penyedia primitif kriptografi yang digunakan Rustls. Ini mungkin menarik jika Anda memiliki persyaratan platform, kepatuhan, atau fitur tertentu yang tidak dipenuhi oleh penyedia default, aws-lc-rs
.
Pengguna yang ingin menyesuaikan penyedia yang digunakan dapat melakukannya saat membuat instance ClientConfig
dan ServerConfig
menggunakan metode with_crypto_provider
pada masing-masing jenis pembuat konfigurasi. Lihat dokumentasi crypto::CryptoProvider
untuk lebih jelasnya.
Rustls dikirimkan dengan dua penyedia bawaan yang dikontrol dengan tanda fitur terkait:
aws-lc-rs
- diaktifkan secara default, tersedia dengan tanda fitur aws_lc_rs
diaktifkan.ring
- tersedia dengan tanda fitur ring
diaktifkan. Lihat dokumentasi untuk crypto::CryptoProvider
untuk detail tentang cara penyedia dipilih.
Komunitas juga mulai mengembangkan penyedia pihak ketiga untuk Rustls:
rustls-mbedtls-provider
- penyedia yang menggunakan mbedtls
untuk kriptografi.boring-rustls-provider
- penyedia pekerjaan dalam proses yang menggunakan boringssl
untuk kriptografi.rustls-rustcrypto
- penyedia eksperimental yang menggunakan kripto primitif dari RustCrypto
untuk kriptografi.rustls-post-quantum
: penyedia eksperimental yang menambahkan dukungan untuk pertukaran kunci pasca-kuantum ke penyedia aws-lc-rs default.rustls-wolfcrypt-provider
- penyedia yang masih dalam proses yang menggunakan wolfCrypt
untuk kriptografi. Kami juga memberikan contoh sederhana penulisan penyedia Anda sendiri pada contoh custom-provider
. Contoh ini mengimplementasikan penyedia minimal menggunakan bagian dari ekosistem RustCrypto
.
Lihat bagian Membuat CryptoProvider khusus pada dokumentasi untuk informasi lebih lanjut tentang topik ini.
Direktori contoh kami berisi demo yang menunjukkan cara menangani I/O menggunakan stream::Stream
helper, serta I/O asinkron yang lebih kompleks menggunakan mio
. Jika Anda sudah menggunakan Tokio untuk runtime async, Anda mungkin lebih suka menggunakan tokio-rustls
daripada berinteraksi dengan Rustls secara langsung.
Contoh berbasis mio
adalah yang paling lengkap, dan dibahas di bawah. Pengguna yang baru mengenal Rustls mungkin lebih suka melihat contoh klien/server sederhana sebelum mendalami contoh MIO yang lebih kompleks.
Program contoh klien MIO diberi nama tlsclient-mio
.
Beberapa contoh dijalankan:
$ 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
(...)
atau
$ cargo run --bin tlsclient-mio -- --http expired.badssl.com
TLS error: InvalidCertificate(Expired)
Connection closed
Jalankan cargo run --bin tlsclient-mio -- --help
untuk opsi lainnya.
Program contoh server MIO diberi nama tlsserver-mio
.
Berikut ini contoh prosesnya; kita memulai server gema TLS, lalu menyambungkannya dengan openssl
dan 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
Jalankan cargo run --bin tlsserver-mio -- --help
untuk opsi lainnya.
Rustls didistribusikan di bawah tiga lisensi berikut:
Ini termasuk masing-masing sebagai LICENSE-APACHE, LICENSE-MIT dan LICENSE-ISC. Anda dapat menggunakan perangkat lunak ini berdasarkan ketentuan lisensi mana pun, sesuai pilihan Anda.
Proyek ini mengadopsi Kode Etik Rust. Silakan kirim email ke [email protected] untuk melaporkan setiap kejadian pelanggaran, atau jika Anda memiliki komentar atau pertanyaan mengenai Pedoman Perilaku.