مكتبة wolfSSL SSL/TLS المضمنة
مكتبة SSL المضمنة wolfSSL (المعروفة سابقًا باسم CyaSSL) هي مكتبة SSL/TLS خفيفة الوزن مكتوبة بلغة ANSI C وتستهدف البيئات المضمنة وRTOS والبيئات المحدودة الموارد - ويرجع ذلك أساسًا إلى صغر حجمها وسرعتها ومجموعة الميزات. يتم استخدامه بشكل شائع في بيئات التشغيل القياسية أيضًا بسبب أسعاره الخالية من حقوق الملكية والدعم الممتاز عبر الأنظمة الأساسية. يدعم wolfSSL معايير الصناعة حتى TLS 1.3 وDTLS 1.3 الحالية، وهو أصغر بما يصل إلى 20 مرة من OpenSSL، ويقدم شفرات تقدمية مثل مجموعات ChaCha20 وCurve25519 وBlake2b وPost-Quantum TLS 1.3. تقارير قياس أداء المستخدم وملاحظاته تشير إلى أداء أفضل بشكل كبير عند استخدام wolfSSL عبر OpenSSL.
يتم تشغيل wolfSSL بواسطة مكتبة التشفير wolfCrypt. تم التحقق من صحة نسختين من wolfCrypt وفقًا لمعايير FIPS 140-2 (الشهادة رقم 2425 والشهادة رقم 3389). التحقق من صحة FIPS 140-3 قيد التقدم. للحصول على معلومات إضافية، تفضل بزيارة الأسئلة الشائعة حول wolfCrypt FIPS أو اتصل بـ [email protected].
لماذا تختار wolfSSL؟
هناك العديد من الأسباب لاختيار wolfSSL كحل SSL/TLS مضمن أو سطح المكتب أو الهاتف المحمول أو المؤسسة. تتضمن بعض أهم الأسباب الحجم (تتراوح أحجام البصمة النموذجية من 20 إلى 100 كيلو بايت)، ودعم أحدث المعايير (SSL 3.0، TLS 1.0، TLS 1.1، TLS 1.2، TLS 1.3، DTLS 1.0، DTLS 1.2، وDTLS 1.3) ودعم التشفير الحالي والتقدمي (بما في ذلك تشفير التدفق)، والأنظمة الأساسية المتعددة، وبدون حقوق ملكية، وواجهة برمجة التطبيقات المتوافقة مع OpenSSL لتسهيل النقل إلى التطبيقات الحالية التي استخدمت سابقًا حزمة OpenSSL. للحصول على قائمة كاملة بالميزات، راجع الفصل 4 من دليل wolfSSL.
ملاحظات، يرجى القراءة
ملاحظة 1
لم يعد wolfSSL اعتبارًا من الإصدار 3.6.6 يمكّن SSLv3 افتراضيًا. لم يعد wolfSSL يدعم أيضًا مجموعات تشفير المفاتيح الثابتة مع PSK أو RSA أو ECDH. وهذا يعني أنه إذا كنت تخطط لاستخدام مجموعات تشفير TLS، فيجب عليك تمكين DH (يتم تشغيل DH بشكل افتراضي)، أو تمكين ECC (يتم تشغيل ECC بشكل افتراضي)، أو يجب عليك تمكين مجموعات تشفير المفاتيح الثابتة بواحد أو أكثر من التعريفات التالية:
WOLFSSL_STATIC_DH
WOLFSSL_STATIC_RSA
WOLFSSL_STATIC_PSK
على الرغم من إهمال مجموعات تشفير المفاتيح الثابتة وستتم إزالتها من الإصدارات المستقبلية من TLS. كما أنها تقلل من أمانك عن طريق إزالة PFS.
عند ترجمة ssl.c
، سيُصدر wolfSSL الآن خطأ مترجم في حالة عدم توفر مجموعات تشفير. يمكنك إزالة هذا الخطأ عن طريق تحديد WOLFSSL_ALLOW_NO_SUITES
في حالة رغبتك في ذلك، أي أنك لا تستخدم مجموعات تشفير TLS.
الملاحظة 2
يتبع wolfSSL أسلوبًا مختلفًا للتحقق من الشهادة عن أسلوب OpenSSL. السياسة الافتراضية للعميل هي التحقق من الخادم، وهذا يعني أنه إذا لم تقم بتحميل المراجع المصدقة للتحقق من الخادم، فسوف تحصل على خطأ اتصال، ولا يوجد خطأ في الموقع لتأكيد الفشل (-188).
إذا كنت تريد محاكاة سلوك OpenSSL المتمثل في نجاح SSL_connect
حتى في حالة فشل التحقق من الخادم وتقليل الأمان، فيمكنك القيام بذلك عن طريق الاتصال:
wolfSSL_CTX_set_verify ( ctx , WOLFSSL_VERIFY_NONE , NULL );
قبل الاتصال بـ wolfSSL_new();
. على الرغم من أنه غير مستحسن.
ملاحظة 3
لم تعد قيم التعداد SHA وSHA256 وSHA384 وSHA512 متاحة عند إنشاء wolfSSL باستخدام --enable-opensslextra
( OPENSSL_EXTRA
) أو باستخدام الماكرو NO_OLD_SHA_NAMES
. يتم تعيين هذه الأسماء إلى OpenSSL API لوظيفة تجزئة مكالمة واحدة. بدلاً من ذلك، يجب استخدام الاسم WC_SHA
و WC_SHA256
و WC_SHA384
و WC_SHA512
لاسم التعداد.
إصدار wolfSSL 5.7.4 (24 أكتوبر 2024)
تم تطوير الإصدار 5.7.4 وفقًا لتطوير wolfSSL وعملية ضمان الجودة (انظر الرابط أدناه) واجتاز معايير الجودة بنجاح. https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
ملحوظة: * --enable-heapmath تم إهماله وستتم إزالته بحلول نهاية عام 2024
يشير PR إلى طلب السحب، ويشير PR إلى رقم طلب سحب GitHub حيث تمت إضافة تغيير الرمز.
نقاط الضعف
- [منخفض] عند تمكين طبقة التوافق OpenSSL، يتصرف التحقق من الشهادة بشكل مختلف في wolfSSL عن OpenSSL، في تطبيقات X509_STORE_add_cert() وX509_STORE_load_locations(). في السابق، في الحالات التي قام فيها التطبيق بتحميل شهادة وسيطة بشكل صريح، كان wolfSSL يتحقق فقط من تلك الشهادة المتوسطة، بدلاً من التحقق من المرجع المصدق الجذر. يؤثر هذا فقط على حالات الاستخدام التي يتم فيها استدعاء واجهة برمجة التطبيقات مباشرة، ولا يؤثر على اتصالات TLS. يُنصح المستخدمون الذين يستدعون API X509_STORE_add_cert() أو X509_STORE_load_locations() مباشرة في تطبيقاتهم بتحديث إصدار wolfSSL المستخدم أو إجراء فحوصات سلامة إضافية على الشهادات المحملة في X509_STORE عند التحقق من الشهادة. (#8087)
إصلاح البناء التجريبي PQC TLS
- عند استخدام TLS مع تمكين خوارزميات ما بعد الكم، يستخدم الاتصال منحنى EC أصغر من المتفق عليه. يُنصح المستخدمون الذين ينشئون مجموعات تشفير --enable-experimental وتمكين PQC مع اتصالات TLS بتحديث إصدار wolfSSL المستخدم. شكرا لدانيال كوريا على التقرير. (#8084)
إضافات الميزات الجديدة
- تمت إضافة تحسينات التجميع الجديدة لـ RISC-V 64 لـ SHA-256 وSHA-512 وChaCha20 وPoly1305 وSHA-3 (PR 7758,7833,7818,7873,7916)
- تنفيذ الدعم لمعرف الاتصال (CID) مع DTLS 1.2 (PR 7995)
- إضافة دعم لـ (DevkitPro)libnds (PR 7990)
- إضافة منفذ لـ Mosquitto OSP (مشروع مفتوح المصدر) (PR 6460)
- إضافة منفذ لـ init sssd (PR 7781)
- إضافة منفذ لـ eXosip2 (PR 7648)
- إضافة دعم لـ STM32G4 (PR 7997)
- إضافة دعم لـ MAX32665 وMAX32666 TPU HW وARM ASM Crypto Callback Support (PR 7777)
- إضافة دعم لبناء wolfSSL لاستخدامه في libspdm (PR 7869)
- إضافة منفذ للاستخدام مع Nucleus Plus 2.3 (PR 7732)
- الدعم الأولي لشهادات سمة RFC5755 x509 (acerts). ممكّن باستخدام --enable-acert (PR 7926)
- يتيح إلغاء تحميل PKCS#11 RSA Padding للرموز المميزة إجراء CKM_RSA_PKCS (تسجيل/تشفير)، وCKM_RSA_PKCS_PSS (توقيع)، وCKM_RSA_PKCS_OAEP (تشفير). (بي آر 7750)
- تمت إضافة وظائف النمط "جديد" و"الحذف" لتخصيص الكومة/التجميع وتحرير هياكل التشفير ذات المستوى المنخفض (PR 3166 و8089)
التحسينات والتحسينات
- زيادة الحد الأقصى الافتراضي. الأسماء من 128 إلى 1024 (PR 7762)
- تمت إضافة وظيفة موافقة DH الجديدة للوقت الثابت wc_DhAgree_ct (PR 7802)
- طبقة التوافق الموسعة مع API EVP_PKEY_is_a (PR 7804)
- إضافة خيار لتعطيل اختبار برنامج اختبار cryptocb باستخدام --disable-cryptocb-sw-test (PR 7862)
- إضافة استدعاء للشهادة والتحقق من رد الاتصال قبل التحقق من تواريخ الشهادة (PR 7895)
- خوارزميات موسعة مدعومة بمجمع wolfCrypt CSharp. إضافة دعم لـ RNG وECC(ECIES وECDHE) وRSA وED25519/Curve25519 وAES-GCM وHashing (PR 3166)
- توسيع دعم MMCAU للاستخدام مع DES ECB (PR 7960)
- تحديث AES SIV للتعامل مع مدخلات البيانات المرتبطة المتعددة (PR 7911)
- قم بإزالة HAVE_NULL_CIPHER من --enable-openssh (PR 7811)
- تمت إزالة التكرار إذا كان (NULL) يتحقق عند الاتصال بـ XFREE (يفعل الماكرو) (PR 7839)
- قم بتعيين RSA_MIN_SIZE الافتراضي على 2048 بت (PR 7923)
- تمت إضافة دعم لـ wolfSSL لاستخدامه باعتباره TLS الافتراضي في zephyr kernel (PR 7731)
- إضافة تمكين إنشاء الموفر باستخدام --enable-wolfprovider مع الأدوات التلقائية (PR 7550)
- دعم رينيساس RX TSIP ECDSA (PR 7685)
- دعم الرجوع إلى إصدار أقدم من DTLS1.3 عندما يدعم الخادم CID (PR 7841)
- يتحقق من جانب الخادم OCSP حتى إذا كان يستخدم v2 multi (PR 7828)
- إضافة معالجة لمعلمات التجزئة الغائبة في تحليل وإنشاء حزمة PKCS7 (PR 7845)
- إضافة استخدام w64wrapper لـ Poly1305، مما يتيح استخدام Poly1305 في البيئات التي لا تحتوي على نوع word64 (PR 7759)
- التحديث إلى دعم maxq10xx (PR 7824)
- إضافة دعم للتحليل عبر سمات PKCS8 الاختيارية (PR 7944)
- إضافة دعم لأي من الطريقتين باستخدام DTLS 1.3 (PR 8012)
- تمت إضافة دعم PKCS7 PEM لتحليل بيانات PEM باستخدام BEGIN/END PKCS7 (PR 7704)
- إضافة دعم CMake لـ WOLFSSL_CUSTOM_CURVES (PR 7962)
- إضافة دعم مطابقة أحرف البدل في أقصى اليسار إلى X509_check_host() (PR 7966)
- إضافة خيار لتعيين SKID مخصص مع إنشاء حزمة PKCS7 (PR 7954)
- بناء wolfSSL كمكتبة باستخدام Ada وتصحيحات لبيان Alire (PR 7303,7940)
- تم تحديث دعم Renesas RX72N (PR 7849)
- تمت إضافة خيار جديد WOLFSSL_COPY_KEY لنسخ المفتاح دائمًا إلى كائن SSL (PR 8005)
- أضف الخيار الجديد WOLFSSL_COPY_CERT لنسخ المخزن المؤقت للشهادة دائمًا لكل كائن SSL (PR 7867)
- أضف خيارًا لاستخدام AES-CBC مع HMAC لتذكرة الجلسة الافتراضية enc/dec. الإعدادات الافتراضية هي AES-128-CBC مع HMAC-SHA256 (PR 7703)
- تحسينات استخدام الذاكرة في wc_PRF وsha256 (للتعليمات البرمجية الصغيرة عند توفر العديد من السجلات) وكائنات sp_int (PR 7901)
- قم بالتغيير في البرنامج النصي للتكوين للتغلب على ">>" بدون أمر. في /bin/sh الأقدم يمكن أن يكون الأمر غامضًا، كما هو مستخدم في أنظمة التشغيل مثل FreeBSD 9.2 (PR 7876)
- لا تحاول تضمين رؤوس النظام عندما لا يكون ذلك مطلوبًا (PR 7813)
- الشهادات: يُسمح الآن بأن يكون ترميز DER لمعلمة خوارزمية توقيع ECC NULL مع تعريف (PR 7903)
- SP x86_64 asm: تحقق من دعم AVX2 لأجهزة VM (PR 7979)
- تحديث دعم rx64n على gr-rose (PR 7889)
- تحديث إصدار FSP إلى الإصدار 5.4.0 لـ RA6M4 (PR 7994)
- قم بتحديث إصدار برنامج تشغيل TSIP إلى الإصدار 1.21 لـ RX65N RSK (PR 7993)
- إضافة رد اتصال تشفير جديد لـ RSA مع الحشو (PR 7907)
- تم استبدال استخدام pqm4 بتطبيقات wolfSSL لـ Kyber/MLDSA (PR 7924)
- دعم سياج الذاكرة الحديث لـ C11 و clang (PR 7938)
- إضافة رد اتصال لتجاوز خطأ CRL (PR 7986)
- توسيع رد اتصال الامتداد X509 غير المعروف للاستخدام مع سياق المستخدم (PR 7730)
- تمت إضافة تتبع أخطاء التصحيح الإضافية باستخدام TLS (PR 7917)
- تمت إضافة دعم وقت التشغيل لتتبعات مكدس استدعاءات المكتبة باستخدام –enable-debug-trace-errcodes=backtrace، باستخدام libbacktrace (PR 7846)
- توافق C89 الموسع (PR 8077)
- دعم موسع لـ WOLFSSL_NO_MALLOC (PR 8065)
- تمت إضافة دعم للتجميع المتقاطع لوحدة Linux kernel (PR 7746)
- وحدة Linux kernel المحدثة مع دعم kernel 6.11 و6.12 (PR 7826)
- تقديم WOLFSSL_ASN_ALLOW_0_SERIAL للسماح بتحليل الشهادات ذات الرقم التسلسلي 0 (PR 7893)
- إضافة مالك المستودع الشرطي إلى جميع مسارات عمل wolfSSL GitHub (PR 7871)
تحديثات Espressif / Arduino
- تحديث إعدادات wolfcrypt.h لـ Espressif ESP-IDF، تحديث القالب (PR 7953)
- تحديث Espressif sha, util, mem, مساعدي الوقت (PR 7955)
- إصلاح Espressif _thread_local_start و_thread_local_end (PR 8030)
- تحسين المعيار لأجهزة Espressif (PR 8037)
- تقديم Espressif المشترك CONFIG_WOLFSL_EXAMPLE_NAME، Kconfig (PR 7866)
- إضافة wolfSSL esp-tls ودعم حزمة الشهادات لـ Espressif ESP-IDF (PR 7936)
- تحديث إصدار wolfssl لـ Arduino (PR 7775)
نشر تحديثات التشفير الكمي
- الديليثيوم: دعم صفائف الحجم الثابت في dilithium_key (PR 7727)
- الديليثيوم: إضافة خيار لاستخدام الحساب المسبق بعلامة صغيرة (PR 7744)
- السماح ببناء Kyber باستخدام FIPS (PR 7788)
- السماح باستخدام Kyber asm في وحدة Linux kernel (PR 7872)
- ديليثيوم، كايبر: تحديث للمواصفات النهائية (PR 7877)
- الديليثيوم: دعم مسودة FIPS 204 والمسودة النهائية (PR 7909,8016)
تحسينات تجميع ARM
- تمت إضافة تحسينات تجميع ARM32 لـ ChaCha20 وPoly1305 (PR 8020)
- تحسينات تحسينات التجميع Poly1305 لـ Aarch64 (PR 7859)
- تمت إضافة تحسينات التجميع Poly1305 لـ Thumb-2 (PR 7939)
- إضافة خيار بناء ARM ASM إلى STM32CubePack (PR 7747)
- إضافة ARM64 إلى مشروع Visual Studio (PR 8010)
- تحسينات تجميع Kyber لـ ARM32 وAarch64 (PR 8040,7998)
- تحسينات تجميع Kyber لـ ARMv7E-M/ARMv7-M (PR 7706)
إصلاحات
- تحميل مفتاح ECC: إصلاحات للشهادات ذات المعلمات غير الافتراضية للحجم (PR 7751)
- إصلاحات لبناء x86 في Visual Studio لنظام التشغيل غير Windows (PR 7884)
- إصلاح رد الاتصال السري لـ TLS v1.2، والكشف بشكل غير صحيح عن السر الرئيسي السيئ (PR 7812)
- إصلاحات لاستخدام تجميع PowerPC مع Darwin وSP math all (PR 7931)
- إصلاح مشكلة اكتشاف الإصدارات الأقدم من نظام التشغيل Mac OS عند محاولة الارتباط بـ libdispatch (PR 7932)
- إصلاح إرجاع DTLS1.3 إلى DTLS1.2 عندما يرسل الخادم حزم مصافحة متعددة مدمجة في عملية إرسال واحدة. (PR 7840)
- إصلاح OCSP لحفظ الطلب إذا تم تخزينه في ssl->ctx->certOcspRequest (PR 7779)
- قم بالإصلاح إلى OCSP للبحث عن CA عن طريق تجزئة المفتاح بدلاً من ext. معرف المفتاح (PR 7934)
- إصلاح الذاكرة الثابتة والبنية المفردة (PR 7737)
- إصلاح عدم السماح بـ Shake128/256 مع Xilinx AFALG (PR 7708)
- إصلاح لدعم PKCS11 دون إنشاء مفتاح RSA (PR 7738)
- إصلاح عدم استدعاء رد اتصال التوقيع عند استخدام ردود اتصال PK + TLS 1.3 (PR 7761)
- ملصق إصلاح Cortex-M/Thumb2 ASM لمترجم IAR (PR 7753)
- تم الإصلاح باستخدام PKCS11 للتكرار بشكل صحيح عبر معرف الفتحة (PR 7736)
- توقف عن تجريد رأس التسلسل على ملحق AltSigAlg (PR 7710)
- إصلاح ParseCRL_AuthKeyIdExt باستخدام قالب ASN لتعيين قيمة extAuthKeyIdSet (PR 7742)
- استخدم الحد الأقصى لطول المفتاح لحجم المخزن المؤقت لتشفير PSK (PR 7707)
- إصلاح DTLS 1.3 للتحقق من الحجم ليشمل الرؤوس وإصلاحات CID (PR 7912,7951)
- إصلاح STM32 Hash FIFO وإضافة دعم لـ STM32U5A9xx (PR 7787)
- إصلاح خطأ بناء CMake للبنيات الضفيرة (PR 8021)
- SP Maths: إصلاح PowerPC ASM لاستخدام XOR بدلاً من LI (PR 8038)
- تحميل SSL للمفاتيح/الشهادات: الاختبار والإصلاحات (PR 7789)
- متنوعات إصلاحات للديليثيوم وكايبر (PR 7721,7765,7803,8027,7904)
- إصلاحات لبناء مصادر wolfBoot لـ PQ LMS/XMSS (PR 7868)
- إصلاحات للبناء مع تمكين Kyber باستخدام منفذ CMake وzephyr (PR 7773)
- إصلاح حالات الحافة مع استئناف الجلسة باستخدام TLS 1.2 (PR 8097)
- إصلاح مشكلة ARM ASM مع عدم قيام AES CFB/OFB بتهيئة العضو "الأيسر" (PR 8099)
للحصول على معلومات إضافية عن الثغرات الأمنية، قم بزيارة صفحة الثغرات الأمنية على: https://www.wolfssl.com/docs/security-vulnerabilities/
راجع ملف التثبيت للحصول على تعليمات البناء. يمكن العثور على مزيد من المعلومات عبر الإنترنت على: https://wolfssl.com/wolfSSL/Docs.html
موارد
موقع wolfSSL
ويكي ولفSSL
الأسئلة الشائعة حول FIPS 140-2/140-3
وثائق wolfSSL
دليل وولفSSL
مرجع API wolfSSL
مرجع API wolfCrypt
تلس 1.3
نقاط الضعف في wolfSSL
أمثلة إضافية على wolfSSL
هيكل الدليل
├── certs [Certificates used in tests and examples]
├── cmake [Cmake build utilities]
├── debian [Debian packaging files]
├── doc [Documentation for wolfSSL (Doxygen)]
├── Docker [Prebuilt Docker environments]
├── examples [wolfSSL examples]
│ ├── asn1 [ASN.1 printing example]
│ ├── async [Asynchronous Cryptography example]
│ ├── benchmark [TLS benchmark example]
│ ├── client [Client example]
│ ├── configs [Example build configurations]
│ ├── echoclient [Echoclient example]
│ ├── echoserver [Echoserver example]
│ ├── pem [Example for convert between PEM and DER]
│ ├── sctp [Servers and clients that demonstrate wolfSSL's DTLS-SCTP support]
│ └── server [Server example]
├── IDE [Contains example projects for various development environments]
├── linuxkm [Linux Kernel Module implementation]
├── m4 [Autotools utilities]
├── mcapi [wolfSSL MPLAB X Project Files]
├── mplabx [wolfSSL MPLAB X Project Files]
├── mqx [wolfSSL Freescale CodeWarrior Project Files]
├── rpm [RPM packaging metadata]
├── RTOS
│ └── nuttx [Port of wolfSSL for NuttX]
├── scripts [Testing scripts]
├── src [wolfSSL source code]
├── sslSniffer [wolfSSL sniffer can be used to passively sniff SSL traffic]
├── support [Contains the pkg-config file]
├── tests [Unit and configuration testing]
├── testsuite [Test application that orchestrates tests]
├── tirtos [Port of wolfSSL for TI RTOS]
├── wolfcrypt [The wolfCrypt component]
│ ├── benchmark [Cryptography benchmarking application]
│ ├── src [wolfCrypt source code]
│ │ └── port [Supported hardware acceleration ports]
│ └── test [Cryptography testing application]
├── wolfssl [Header files]
│ ├── openssl [Compatibility layer headers]
│ └── wolfcrypt [Header files]
├── wrapper [wolfSSL language wrappers]
└── zephyr [Port of wolfSSL for Zephyr RTOS]