Rustls เป็นไลบรารี TLS สมัยใหม่ที่เขียนด้วยภาษา Rust
Rustls ใช้ในการผลิตในหลายองค์กรและโครงการ เรามุ่งหวังที่จะรักษาความเสถียรของพื้นผิว API ที่เหมาะสม แต่ API อาจมีการพัฒนาเมื่อเราทำการเปลี่ยนแปลงเพื่อรองรับคุณสมบัติใหม่หรือการปรับปรุงประสิทธิภาพ
เรามีแผนงานสำหรับแผนการในอนาคตของเรา นอกจากนี้เรายังมีการวัดประสิทธิภาพเพื่อป้องกันการถดถอยของประสิทธิภาพและเพื่อให้คุณประเมินสนิมบนฮาร์ดแวร์เป้าหมายของคุณ
หากคุณต้องการช่วยเหลือ โปรดดูที่ 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
ยังมีให้บริการผ่านคุณสมบัติลัง ring
: ดูแพลตฟอร์มเป้าหมาย ring
ที่รองรับ
ด้วยการจัดเตรียมอินสแตนซ์ที่กำหนดเองของ crypto::CryptoProvider
คุณสามารถแทนที่การพึ่งพาการเข้ารหัสทั้งหมดของrustls ได้ นี่คือเส้นทางสู่การพกพาไปยังชุดสถาปัตยกรรมและสภาพแวดล้อมที่กว้างขึ้น หรือข้อกำหนดการปฏิบัติตามข้อกำหนด ดูเอกสาร crypto::CryptoProvider
สำหรับรายละเอียดเพิ่มเติม
การระบุ default-features = false
เมื่อขึ้นอยู่กับrustls จะเป็นการลบการพึ่งพา 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 มาพร้อมกับผู้ให้บริการในตัวสองรายที่ควบคุมด้วยแฟล็กคุณลักษณะที่เกี่ยวข้อง:
aws-lc-rs
- เปิดใช้งานโดยค่าเริ่มต้น พร้อมใช้งานเมื่อเปิดใช้งานการตั้งค่าสถานะคุณลักษณะ aws_lc_rs
ring
- ใช้งานได้เมื่อเปิดใช้งานการตั้งค่าสถานะ ring
ดูเอกสารประกอบสำหรับ crypto::CryptoProvider
สำหรับรายละเอียดเกี่ยวกับวิธีการเลือกผู้ให้บริการ
ชุมชนได้เริ่มพัฒนาผู้ให้บริการบุคคลที่สามสำหรับ Rustls:
rustls-mbedtls-provider
- ผู้ให้บริการที่ใช้ mbedtls
สำหรับการเข้ารหัสboring-rustls-provider
- ผู้ให้บริการที่กำลังดำเนินการซึ่งใช้ boringssl
สำหรับการเข้ารหัสrustls-rustcrypto
- ผู้ให้บริการทดลองที่ใช้ crypto primitives จาก RustCrypto
สำหรับการเข้ารหัสrustls-post-quantum
: ผู้ให้บริการทดลองที่เพิ่มการรองรับการแลกเปลี่ยนคีย์หลังควอนตัมให้กับผู้ให้บริการ aws-lc-rs เริ่มต้นrustls-wolfcrypt-provider
- ผู้ให้บริการที่กำลังดำเนินการซึ่งใช้ wolfCrypt
สำหรับการเข้ารหัส นอกจากนี้เรายังมีตัวอย่างง่ายๆ ในการเขียนผู้ให้บริการของคุณเองในตัวอย่าง custom-provider
อีกด้วย ตัวอย่างนี้ใช้ผู้ให้บริการขั้นต่ำโดยใช้บางส่วนของระบบนิเวศ RustCrypto
ดูส่วนการสร้าง CryptoProvider แบบกำหนดเองของเอกสารประกอบสำหรับข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้
ไดเร็กทอรีตัวอย่างของเราประกอบด้วยการสาธิตที่แสดงวิธีจัดการ I/O โดยใช้ stream::Stream
helper รวมถึง I/O แบบอะซิงโครนัสที่ซับซ้อนมากขึ้นโดยใช้ mio
หากคุณใช้ 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 ตามลำดับ คุณสามารถใช้ซอฟต์แวร์นี้ได้ภายใต้เงื่อนไขของใบอนุญาตเหล่านี้ตามตัวเลือกของคุณ
โครงการนี้ใช้หลักจรรยาบรรณของสนิม โปรดส่งอีเมลไปที่[email protected] เพื่อรายงานกรณีของการประพฤติมิชอบ หรือหากคุณมีความคิดเห็นหรือคำถามใดๆ เกี่ยวกับหลักจรรยาบรรณ