العودة إلى التحديثات
New releaseSep 8, 2026

rustls v/0.23.44

مكتبة TLS آمنة للذاكرة مكتوبة بلغة Rust، تنفّذ بروتوكولَي TLS 1.2 و TLS 1.3 مع مزوّدي تشفير قابلين للتبديل، وأوضاع العميل/الخادم، ومصادقة قائمة على الشهادات.

مشاركة

Rustls هي مكتبة TLS حديثة مكتوبة بلغة Rust.

الحالة

تُستخدم Rustls في الإنتاج في العديد من المؤسسات والمشاريع. نهدف إلى الحفاظ على استقرار معقول لواجهة البرمجة (API)، لكن الواجهة قد تتطور مع إجراء تغييرات لاستيعاب ميزات جديدة أو تحسينات في الأداء.

لدينا خارطة طريق لخططنا المستقبلية. لدينا أيضًا معايير أداء لمنع تراجع الأداء ولتمكينك من تقييم rustls على عتادك المستهدف.

إذا كنت ترغب في المساعدة، فيرجى الاطلاع على CONTRIBUTING.md.

Build Status Coverage Status (codecov.io) Documentation Chat OpenSSF Best Practices

ينطق القائمون على الصيانة كلمة «rustls» بصيغة «rustles» (وليس rust-TLS)، لكننا لا نتمسك بشدة بهذا الأمر.

سجل التغييرات

القائمة التفصيلية للتغييرات في كل إصدار متاحة على https://github.com/rustls/rustls/releases.

التوثيق

https://docs.rs/rustls/

النهج

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 حاليًا على مزودي تشفير اثنين:

  • rustls-aws-lc-rs - مزود يستخدم حزمة aws-lc-rs للتشفير. على الرغم من أن هذا المزود قد يكون أكثر صعوبة في البناء على بعض المنصات، إلا أنه يوفر أداءً ممتازًا ومجموعة ميزات كاملة (بما في ذلك خوارزميات ما بعد الكم).
  • rustls-ring - مزود يستخدم حزمة ring للتشفير. هذا المزود أسهل في البناء على مجموعة متنوعة من المنصات، لكن مجموعة ميزاته أكثر محدودية (على سبيل المثال، لا يدعم خوارزميات ما بعد الكم).

يوصي فريق Rustls باستخدام حزمة rustls-aws-lc-rs لما توفره من مجموعة ميزات كاملة وأداء عالٍ. راجع الأسئلة الشائعة حول aws-lc-rs لمزيد من التفاصيل حول قيود دعم المنصات/البنى في aws-lc-rs.

راجع توثيق crypto::CryptoProvider للحصول على تفاصيل حول كيفية اختيار المزودين.

(بالنسبة لإصدارات rustls قبل 0.24، كان يتم شحن هذين المزودين كجزء من حزمة rustls، وكانت ميزات Cargo تُستخدم لاختيار المزود المفضل. وكانت ميزة aws-lc-rs مفعّلة افتراضيًا.)

مزودون من جهات خارجية

بدأ المجتمع أيضًا في تطوير مزودين من جهات خارجية لـ Rustls:

راجع قسم إنشاء مزود CryptoProvider مخصص في التوثيق لمزيد من المعلومات حول هذا الموضوع.

مثال على الكود

يحتوي دليل examples على عروض توضيحية تشرح كيفية التعامل مع الإدخال/الإخراج باستخدام أداة stream::Stream، بالإضافة إلى إدخال/إخراج غير متزامن أكثر تعقيدًا باستخدام mio. إذا كنت تستخدم Tokio بالفعل كبيئة تشغيل غير متزامنة، فقد تفضّل استخدام tokio-rustls بدلاً من التعامل مع 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 بموجب التراخيص الثلاثة التالية:

  • رخصة Apache الإصدار 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] للإبلاغ عن أي حالة سوء سلوك، أو إذا كانت لديك أي تعليقات أو أسئلة حول مدونة قواعد السلوك.

الفئات