s2n-tls هو تطبيق C99 لبروتوكولات TLS/SSL التي تم تصميمها لتكون بسيطة وصغيرة وسريعة ومع مراعاة الأمان كأولوية. تم إصداره وترخيصه بموجب ترخيص Apache 2.0.
s2n-tls هو اختصار لعبارة "إشارة إلى ضوضاء" وهي إشارة إلى عملية التشفير شبه السحرية - إخفاء الإشارات ذات المعنى، مثل بياناتك المهمة، على أنها ضوضاء عشوائية على ما يبدو.
- إعلان s2n-tls
# clone s2n-tls
git clone https://github.com/aws/s2n-tls.git
cd s2n-tls
# install build dependencies
sudo apt update
sudo apt install cmake
# install a libcrypto
sudo apt install libssl-dev
# build s2n-tls
cmake . -Bbuild
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=./s2n-tls-install
cmake --build build -j $( nproc )
CTEST_PARALLEL_LEVEL= $( nproc ) ctest --test-dir build
cmake --install build
راجع وثائق إنشاء s2n-tls للحصول على مزيد من الإرشادات حول إنشاء s2n-tls لمنصتك.
إذا كنت تعتقد أنك قد وجدت مشكلة تؤثر على الأمان، فيرجى اتباع عملية الإخطار الأمني لدينا.
إذا كانت لديك أي أسئلة حول إرسال العلاقات العامة، أو استخدام واجهة برمجة تطبيقات s2n-tls، أو شيء مشابه، فيرجى فتح مشكلة.
يستخدم s2n-tls Doxygen لتوثيق واجهة برمجة التطبيقات العامة الخاصة به. يمكن العثور على أحدث وثائق s2n-tls على صفحات GitHub. يشرح دليل الاستخدام كيف يمكن تكوين ميزات TLS المختلفة واستخدامها.
يمكن إنشاء وثائق الإصدارات الأقدم أو فروع s2n-tls محليًا. لإنشاء الوثائق، قم بتثبيت doxygen وتشغيل doxygen docs/doxygen/Doxyfile
. يمكن الآن العثور على وثائق الدوكسيجين على docs/doxygen/output/html/index.html
.
تتوفر تعليمات تثبيت Doxygen على صفحة ويب Doxygen.
لقد قمنا بإدراج التوزيعات والأنظمة الأساسية ضمن مستويين: منصات المستوى 1 مضمونة لبناء الاختبارات وتشغيلها واجتيازها في CI. يتم ضمان إنشاء منصات المستوى 2 وسنقوم بمعالجة المشكلات المفتوحة ضدها، ولكنها لا تعمل حاليًا في CI لدينا ولا تتم مراجعتها بشكل نشط مع كل التزام. إذا كنت تستخدم منصة غير مدرجة أدناه وترغب في طلب (أو مساعدة!) إضافتها إلى CI لدينا، يرجى فتح مشكلة للمناقشة.
التوزيع في CI | المنصات |
---|---|
أوبونتو 18، أوبونتو 24 ** | x86_64 |
أوبونتو22 | x86_64, i686 |
AL2، AL2023 ** | x86_64, aarch64 |
نيكس أو إس | x86_64, aarch64 |
اوبن بي اس دي 7.4 | x86_64 |
برنامج FreeBSD الأحدث | x86_64 |
أحدث OSX | aarch64 |
** العمل قيد التقدم
التوزيع ليس في CI | المنصات |
---|---|
فيدورا كور 34-36 | x86_64, aarch64 |
أوبونتو14/16/20 | x86_64, aarch64 |
أوبونتو18/22/24 | aarch64 |
أو إس إكس 12-14 | x86_64 |
قوائم التوزيع هذه ليست شاملة، كما أن الأدوات المفقودة أو أن مكتبة libcrypto المدعومة المفقودة قد تمنع عملية الإنشاء الناجحة.
تم تصميم واجهات برمجة تطبيقات الإدخال/الإخراج s2n-tls لتكون بديهية للمطورين المطلعين على واجهات برمجة تطبيقات الإدخال/الإخراج POSIX المستخدمة على نطاق واسع، ويدعم s2n-tls عمليات الإدخال/الإخراج ذات الحظر وغير الحظر والإدخال والإخراج مزدوج الاتجاه. بالإضافة إلى ذلك، لا توجد أقفال أو كائنات مزامنة داخل s2n-tls.
/* Create a server mode connection handle */
struct s2n_connection * conn = s2n_connection_new ( S2N_SERVER );
if ( conn == NULL ) {
... error ...
}
/* Associate a connection with a file descriptor */
if ( s2n_connection_set_fd ( conn , fd ) < 0 ) {
... error ...
}
/* Negotiate the TLS handshake */
s2n_blocked_status blocked ;
if ( s2n_negotiate ( conn , & blocked ) < 0 ) {
... error ...
}
/* Write data to the connection */
int bytes_written ;
bytes_written = s2n_send ( conn , "Hello World" , sizeof ( "Hello World" ), & blocked );
للحصول على تفاصيل حول إنشاء مكتبة s2n-tls وكيفية استخدام s2n-tls في تطبيق تقوم بتطويره، راجع دليل الاستخدام.
تطبق s2n-tls SSLv3 وTLS1.0 وTLS1.1 وTLS1.2 وTLS1.3. بالنسبة للتشفير، يدعم s2n-tls 128 بت و256 بت AES في أوضاع CBC وGCM، وChaCha20، و3DES، وRC4. من أجل السرية الأمامية، يدعم s2n-tls كلاً من DHE وECDHE. يدعم s2n-tls أيضًا مؤشر اسم الخادم (SNI)، ومفاوضات بروتوكول طبقة التطبيق (ALPN)، وبروتوكول حالة الشهادة عبر الإنترنت (OCSP) TLS. يتم تعطيل كل من SSLv3 وRC4 و3DES وDHE بشكل افتراضي لأسباب أمنية.
نظرًا لأنه قد يكون من الصعب تتبع خوارزميات وبروتوكولات التشفير الأفضل للاستخدام، فإن s2n-tls يتميز بواجهة برمجة تطبيقات بسيطة لاستخدام أحدث مجموعة من التفضيلات "الافتراضية". إذا كنت تفضل البقاء على إصدار محدد للتوافق مع الإصدارات السابقة، فهذا مدعوم أيضًا.
/* Use the latest s2n-tls "default" set of ciphersuite and protocol preferences */
s2n_config_set_cipher_preferences ( config , "default" );
/* Use a specific set of preferences, update when you're ready */
s2n_config_set_cipher_preferences ( config , "20150306" )
داخليًا، يتبع s2n-tls منهجًا منظمًا لحماية البيانات ويتضمن العديد من الآليات المصممة لتحسين السلامة.
تم تصميم كود s2n-tls وكتابته مع التركيز على إمكانية المراجعة. تخضع كافة أكواد s2n-tls لمراجعة الأكواد، ونحن نخطط لاستكمال التقييمات الأمنية لـ s2n-tls على أساس سنوي.
حتى الآن، تم إجراء مراجعتين خارجيتين على مستوى التعليمات البرمجية لـ s2n-tls، بما في ذلك مراجعة بواسطة بائع أمان تجاري. تمت أيضًا مشاركة s2n-tls مع بعض الأعضاء الموثوقين في مجتمعات التشفير والأمان ومجتمعات المصدر المفتوح الأوسع. يتم دائمًا تسجيل أية مشكلات يتم اكتشافها في أداة تعقب المشكلات s2n-tls.
بالإضافة إلى مراجعات التعليمات البرمجية، يخضع s2n-tls لتحليل ثابت منتظم واختبار الزغب واختبار الاختراق. تم إجراء العديد من اختبارات الاختراق، بما في ذلك اثنان من قبل البائعين التجاريين.
يتضمن s2n-tls اختبارات الوحدة الإيجابية والسلبية وحالات الاختبار الشاملة.
يمكن الاطلاع على تغطية اختبار الوحدة هنا. لاحظ أن هذا يمثل تغطية الوحدة لبناء معين. وبما أن هذا الإصدار لن يدعم بالضرورة جميع ميزات s2n-tls، فقد يتم خفض تغطية الاختبار بشكل مصطنع.
يقوم s2n-tls بتشفير أو مسح بيانات النص العادي في أسرع وقت ممكن. على سبيل المثال، يتم مسح المخازن المؤقتة للبيانات التي تم فك تشفيرها أثناء قراءتها بواسطة التطبيق.
يستخدم s2n-tls ميزات نظام التشغيل لحماية البيانات من التبديل إلى القرص أو الظهور في عمليات التفريغ الأساسية.
يتجنب s2n-tls تنفيذ الخيارات والإضافات النادرة الاستخدام، بالإضافة إلى الميزات التي لها تاريخ في إثارة الثغرات الأمنية على مستوى البروتوكول. على سبيل المثال، لا يوجد أي دعم لـ DTLS.
يعتمد أمان TLS وخوارزميات التشفير المرتبطة به على إنشاء أرقام عشوائية آمنة. يوفر s2n-tls لكل موضوع مولدين منفصلين للأرقام العشوائية. أحدهما للبيانات "العامة" التي يتم إنشاؤها عشوائيًا والتي قد تظهر بشكل واضح، والآخر للبيانات "الخاصة" التي يجب أن تظل سرية. يقلل هذا النهج من مخاطر نقاط الضعف المحتملة في القدرة على التنبؤ في خوارزميات توليد الأرقام العشوائية من تسرب المعلومات عبر السياقات.
تم تصميم s2n-tls بحيث يمكن استخدام مكتبات تشفير مختلفة. واليوم، يدعم s2n-tls AWS-LC، وOpenSSL (الإصدارات 1.0.2، و1.1.1، و3.0.x)، وLibreSSL، وBoringSSL لتنفيذ عمليات التشفير الأساسية. تحقق من وثائق بناء libcrypto للحصول على قائمة بالميزات الخاصة بـ libcrypto.
يتضمن s2n-tls دعمًا منظمًا لحجب القنوات الجانبية المستندة إلى الوقت والتي قد تتسبب في تسرب بيانات حساسة. على سبيل المثال، إذا فشل s2n-tls في تحليل سجل TLS أو رسالة المصافحة، فسيضيف s2n-tls تأخيرًا عشوائيًا يتراوح بين 10 و30 ثانية، محببًا بالنانو ثانية، قبل الاستجابة. وهذا يزيد من تعقيد هجمات القنوات الجانبية بتوقيت العالم الحقيقي بعامل لا يقل عن عشرات التريليونات.
يستخدم s2n-tls جداول بسيطة لتشغيل أجهزة حالة TLS/SSL، مما يجعل من الصعب ظهور حالات غير صالحة خارج الترتيب.
تتم كتابة s2n-tls بلغة C، ولكنها تستخدم بشكل خفيف وظائف مكتبة C القياسية وتغطي جميع عمليات معالجة الذاكرة ومعالجة السلسلة والتسلسل في عمليات التحقق المنهجية لفرض الحدود.
إذا اكتشفت مشكلة أمنية محتملة في s2n-tls، فنطلب منك إخطار AWS Security عبر صفحة الإبلاغ عن الثغرات الأمنية. من فضلك لا تقم بإنشاء قضية جيثب العامة.
إذا قمت بحزم أو توزيع s2n-tls، أو استخدام s2n-tls كجزء من خدمة كبيرة متعددة المستخدمين، فقد تكون مؤهلاً للحصول على إشعار مسبق بإصدارات s2n-tls المستقبلية. يرجى الاتصال بـ [email protected].
إذا كنت مهتمًا بالمساهمة في s2n-tls، فيرجى الاطلاع على دليل التطوير الخاص بنا.
راجع قائمة روابط اللغة لدينا للتعرف على روابط اللغة لـ s2n-tls التي نحن على علم بها.