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
عند الاعتماد على الصدأ سيؤدي إلى إزالة التبعية على 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
- مزود تجريبي يستخدم أساسيات التشفير من RustCrypto
للتشفير.rustls-post-quantum
: موفر تجريبي يضيف دعمًا لتبادل المفاتيح بعد الكم إلى موفر aws-lc-rs الافتراضي.rustls-wolfcrypt-provider
- موفر عمل قيد التنفيذ يستخدم wolfCrypt
للتشفير. نقدم أيضًا مثالًا بسيطًا لكتابة الموفر الخاص بك في مثال custom-provider
. يطبق هذا المثال الحد الأدنى من الموفر باستخدام أجزاء من النظام البيئي RustCrypto
.
راجع قسم إنشاء CryptoProvider مخصص في الوثائق لمزيد من المعلومات حول هذا الموضوع.
يحتوي دليل الأمثلة الخاص بنا على عروض توضيحية توضح كيفية التعامل مع الإدخال/الإخراج باستخدام مساعد stream::Stream
، بالإضافة إلى عمليات الإدخال/الإخراج غير المتزامنة الأكثر تعقيدًا باستخدام 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، ثم نتصل به باستخدام 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] للإبلاغ عن أي حالة سوء سلوك، أو إذا كان لديك أي تعليقات أو أسئلة حول قواعد السلوك.