Bibliothèque SSL/TLS intégrée wolfSSL
La bibliothèque SSL intégrée wolfSSL (anciennement CyaSSL) est une bibliothèque SSL/TLS légère écrite en ANSI C et destinée aux environnements intégrés, RTOS et à ressources limitées - principalement en raison de sa petite taille, de sa vitesse et de son ensemble de fonctionnalités. Il est également couramment utilisé dans les environnements d’exploitation standard en raison de son prix sans redevances et de son excellente prise en charge multiplateforme. wolfSSL prend en charge les normes de l'industrie jusqu'aux actuels TLS 1.3 et DTLS 1.3, est jusqu'à 20 fois plus petit qu'OpenSSL et propose des chiffrements progressifs tels que les groupes ChaCha20, Curve25519, Blake2b et Post-Quantum TLS 1.3. L'analyse comparative et les commentaires des utilisateurs signalent des performances considérablement meilleures lors de l'utilisation de wolfSSL sur OpenSSL.
wolfSSL est alimenté par la bibliothèque de cryptographie wolfCrypt. Deux versions de wolfCrypt ont été validées FIPS 140-2 (Certificat #2425 et certificat #3389). La validation FIPS 140-3 est en cours. Pour plus d'informations, visitez la FAQ FIPS wolfCrypt ou contactez [email protected].
Pourquoi choisir wolfSSL ?
Il existe de nombreuses raisons de choisir wolfSSL comme solution SSL/TLS intégrée, de bureau, mobile ou d'entreprise. Certaines des principales raisons incluent la taille (les tailles d'empreinte typiques varient de 20 à 100 Ko), la prise en charge des normes les plus récentes (SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3, DTLS 1.0, DTLS 1.2 et DTLS 1.3). , prise en charge actuelle et progressive du chiffrement (y compris les chiffrements de flux), multiplateforme, libre de droits et une API de compatibilité OpenSSL pour faciliter le portage dans des applications existantes qui ont déjà utilisé le package OpenSSL. Pour une liste complète des fonctionnalités, consultez le chapitre 4 du manuel wolfSSL.
Remarques, veuillez lire
Remarque 1
À partir de la version 3.6.6, wolfSSL n'active plus SSLv3 par défaut. wolfSSL ne prend également plus en charge les suites de chiffrement à clé statique avec PSK, RSA ou ECDH. Cela signifie que si vous prévoyez d'utiliser les suites de chiffrement TLS, vous devez activer DH (DH est activé par défaut) ou activer ECC (ECC est activé par défaut), ou vous devez activer les suites de chiffrement à clé statique avec une ou plusieurs des définitions suivantes :
WOLFSSL_STATIC_DH
WOLFSSL_STATIC_RSA
WOLFSSL_STATIC_PSK
Bien que les suites de chiffrement à clé statique soient obsolètes et seront supprimées des futures versions de TLS. Ils réduisent également votre sécurité en supprimant PFS.
Lors de la compilation ssl.c
, wolfSSL émettra désormais une erreur de compilation si aucune suite de chiffrement n'est disponible. Vous pouvez supprimer cette erreur en définissant WOLFSSL_ALLOW_NO_SUITES
si vous le souhaitez, c'est-à-dire si vous n'utilisez pas de suites de chiffrement TLS.
Remarque 2
wolfSSL adopte une approche différente de celle d'OpenSSL en matière de vérification des certificats. La politique par défaut pour le client est de vérifier le serveur, cela signifie que si vous ne chargez pas les autorités de certification pour vérifier le serveur, vous obtiendrez une erreur de connexion, aucune erreur de signataire pour confirmer l'échec (-188).
Si vous souhaitez imiter le comportement d'OpenSSL consistant à réussir SSL_connect
même si la vérification du serveur échoue et réduit la sécurité, vous pouvez le faire en appelant :
wolfSSL_CTX_set_verify ( ctx , WOLFSSL_VERIFY_NONE , NULL );
avant d'appeler wolfSSL_new();
. Même si ce n'est pas recommandé.
Remarque 3
Les valeurs d'énumération SHA, SHA256, SHA384, SHA512 ne sont plus disponibles lorsque wolfSSL est construit avec --enable-opensslextra
( OPENSSL_EXTRA
) ou avec la macro NO_OLD_SHA_NAMES
. Ces noms sont mappés à l'API OpenSSL pour une fonction de hachage d'appel unique. Au lieu de cela, les noms WC_SHA
, WC_SHA256
, WC_SHA384
et WC_SHA512
doivent être utilisés pour le nom de l'énumération.
wolfSSL version 5.7.4 (24 octobre 2024)
La version 5.7.4 a été développée selon le processus de développement et d'assurance qualité de wolfSSL (voir lien ci-dessous) et a satisfait avec succès aux critères de qualité. https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
REMARQUE : * --enable-heapmath est obsolète et sera supprimé d'ici fin 2024.
PR signifie Pull Request, et PR fait référence à un numéro de demande d'extraction GitHub où le changement de code a été ajouté.
Vulnérabilités
- [Faible] Lorsque la couche de compatibilité OpenSSL est activée, la vérification des certificats se comportait différemment dans wolfSSL et OpenSSL, dans les implémentations X509_STORE_add_cert() et X509_STORE_load_locations(). Auparavant, dans les cas où une application chargeait explicitement un certificat intermédiaire, wolfSSL vérifiait uniquement jusqu'à ce certificat intermédiaire, plutôt que jusqu'à l'autorité de certification racine. Cela n'affecte que les cas d'utilisation dans lesquels l'API est appelée directement et n'affecte pas les connexions TLS. Il est recommandé aux utilisateurs qui appellent l'API X509_STORE_add_cert() ou X509_STORE_load_locations() directement dans leurs applications de mettre à jour la version de wolfSSL utilisée ou d'effectuer des contrôles d'intégrité supplémentaires sur les certificats chargés dans X509_STORE lors de la vérification d'un certificat. (#8087)
Correctif de construction expérimentale PQC TLS
- Lorsque vous utilisez TLS avec des algorithmes post-quantiques activés, la connexion utilise une courbe EC plus petite que celle convenue. Il est recommandé aux utilisateurs qui construisent avec --enable-experimental et activent les suites de chiffrement PQC avec des connexions TLS de mettre à jour la version de wolfSSL utilisée. Merci à Daniel Correa pour le rapport. (#8084)
Ajouts de nouvelles fonctionnalités
- Ajout de nouvelles optimisations d'assemblage RISC-V 64 pour SHA-256, SHA-512, ChaCha20, Poly1305 et SHA-3 (PR 7758,7833,7818,7873,7916)
- Implémenter la prise en charge de l'ID de connexion (CID) avec DTLS 1.2 (PR 7995)
- Ajouter la prise en charge des libnds (DevkitPro) (PR 7990)
- Ajouter un port pour Mosquitto OSP (projet Open Source) (PR 6460)
- Ajouter un port pour init sssd (PR 7781)
- Ajouter un port pour eXosip2 (PR 7648)
- Ajouter la prise en charge de STM32G4 (PR 7997)
- Ajout de la prise en charge du matériel TPU MAX32665 et MAX32666 et de la prise en charge du rappel cryptographique ARM ASM (PR 7777)
- Ajout de la prise en charge de la création de wolfSSL à utiliser dans libspdm (PR 7869)
- Ajouter un port à utiliser avec Nucleus Plus 2.3 (PR 7732)
- Prise en charge initiale des certificats d'attribut RFC5755 x509 (acerts). Activé avec --enable-acert (PR 7926)
- Le déchargement PKCS#11 RSA Padding permet aux jetons d'effectuer CKM_RSA_PKCS (signer/chiffrer), CKM_RSA_PKCS_PSS (signer) et CKM_RSA_PKCS_OAEP (chiffrer). (RP 7750)
- Ajout de fonctions de style « nouveau » et « suppression » pour l'allocation de tas/pool et la libération des structures cryptographiques de bas niveau (PR 3166 et 8089)
Améliorations et optimisations
- Augmentez l'alt maximum par défaut. noms de 128 à 1024 (PR 7762)
- Ajout d'une nouvelle fonction d'accord DH à temps constant wc_DhAgree_ct (PR 7802)
- Couche de compatibilité étendue avec l'API EVP_PKEY_is_a (PR 7804)
- Ajouter une option pour désactiver le test du logiciel de test cryptocb à l'aide de --disable-cryptocb-sw-test (PR 7862)
- Ajouter un appel au rappel de vérification du certificat avant de vérifier les dates du certificat (PR 7895)
- Algorithmes étendus pris en charge avec le wrapper wolfCrypt CSharp. Ajout de la prise en charge de RNG, ECC (ECIES et ECDHE), RSA, ED25519/Curve25519, AES-GCM et Hashing (PR 3166)
- Étendre la prise en charge de MMCAU pour une utilisation avec DES ECB (PR 7960)
- Mettre à jour AES SIV pour gérer plusieurs entrées de données associées (PR 7911)
- Supprimez HAVE_NULL_CIPHER de --enable-openssh (PR 7811)
- Suppression des vérifications if(NULL) en double lors de l'appel de XFREE (la macro le fait) (PR 7839)
- Définissez RSA_MIN_SIZE par défaut sur 2048 bits (PR 7923)
- Ajout de la prise en charge de wolfSSL à utiliser comme TLS par défaut dans le noyau Zephyr (PR 7731)
- Ajouter activer la construction du fournisseur à l'aide de --enable-wolfprovider avec autotools (PR 7550)
- Prise en charge Renesas RX TSIP ECDSA (PR 7685)
- Prise en charge de la rétrogradation DTLS1.3 lorsque le serveur prend en charge CID (PR 7841)
- Le côté serveur vérifie OCSP même s'il utilise v2 multi (PR 7828)
- Ajouter la gestion des paramètres de hachage absents dans l'analyse et la création du bundle PKCS7 (PR 7845)
- Ajoutez l'utilisation de w64wrapper pour Poly1305, permettant à Poly1305 d'être utilisé dans des environnements qui n'ont pas de type word64 (PR 7759)
- Mise à jour du support maxq10xx (PR 7824)
- Ajouter la prise en charge de l'analyse sur les attributs PKCS8 facultatifs (PR 7944)
- Ajoutez la prise en charge des deux méthodes latérales avec DTLS 1.3 (PR 8012)
- Ajout de la prise en charge PKCS7 PEM pour l'analyse des données PEM avec BEGIN/END PKCS7 (PR 7704)
- Ajouter la prise en charge de CMake pour WOLFSSL_CUSTOM_CURVES (PR 7962)
- Ajouter la prise en charge de la correspondance des caractères génériques les plus à gauche à X509_check_host() (PR 7966)
- Ajouter une option pour définir un SKID personnalisé avec la création du bundle PKCS7 (PR 7954)
- Création de wolfSSL en tant que bibliothèque avec Ada et corrections du manifeste Alire (PR 7303,7940)
- Prise en charge de Renesas RX72N mise à jour (PR 7849)
- Nouvelle option WOLFSSL_COPY_KEY ajoutée pour toujours copier la clé dans l'objet SSL (PR 8005)
- Ajoutez la nouvelle option WOLFSSL_COPY_CERT pour toujours copier le tampon de certificat pour chaque objet SSL (PR 7867)
- Ajoutez une option pour utiliser AES-CBC avec HMAC pour le ticket de session par défaut enc/dec. La valeur par défaut est AES-128-CBC avec HMAC-SHA256 (PR 7703)
- Améliorations de l'utilisation de la mémoire dans les objets wc_PRF, sha256 (pour le petit code lorsque de nombreux registres sont disponibles) et sp_int (PR 7901)
- Modification du script de configuration pour contourner ">>" sans commande. Dans l'ancien /bin/sh, cela peut être ambigu, comme utilisé dans les systèmes d'exploitation tels que FreeBSD 9.2 (PR 7876)
- N'essayez pas d'inclure les en-têtes système lorsque cela n'est pas nécessaire (PR 7813)
- Certificats : le codage DER du paramètre de l'algorithme de signature ECC peut désormais être NULL avec une définition (PR 7903)
- SP x86_64 asm : vérifiez la prise en charge d'AVX2 pour les machines virtuelles (PR 7979)
- Mettre à jour le support rx64n sur gr-rose (PR 7889)
- Mettre à jour la version FSP vers la v5.4.0 pour RA6M4 (PR 7994)
- Mettre à jour la version du pilote TSIP vers la version 1.21 pour le RX65N RSK (PR 7993)
- Ajouter un nouveau rappel crypto pour RSA avec remplissage (PR 7907)
- Remplacement de l'utilisation de pqm4 par des implémentations wolfSSL de Kyber/MLDSA (PR 7924)
- Prise en charge modernisée de la barrière de mémoire pour C11 et clang (PR 7938)
- Ajouter un rappel de remplacement d'erreur CRL (PR 7986)
- Étendre le rappel d'extension inconnue X509 pour une utilisation avec un contexte utilisateur (PR 7730)
- Suivi des erreurs de débogage supplémentaire ajouté avec TLS (PR 7917)
- Ajout de la prise en charge de l'exécution pour les traces de pile d'appels de bibliothèque avec –enable-debug-trace-errcodes=backtrace, en utilisant libbacktrace (PR 7846)
- Conformité C89 étendue (PR 8077)
- Prise en charge étendue de WOLFSSL_NO_MALLOC (PR 8065)
- Ajout de la prise en charge de la compilation croisée du module du noyau Linux (PR 7746)
- Module de noyau Linux mis à jour avec prise en charge des noyaux 6.11 et 6.12 (PR 7826)
- Introduisez WOLFSSL_ASN_ALLOW_0_SERIAL pour permettre l'analyse des certificats avec un numéro de série de 0 (PR 7893)
- Ajouter le référentiel_owner conditionnel à tous les workflows wolfSSL GitHub (PR 7871)
Mises à jour Espressif/Arduino
- Mettre à jour wolfcrypt settings.h pour Espressif ESP-IDF, mise à jour du modèle (PR 7953)
- Mise à jour Espressif sha, util, mem, time helpers (PR 7955)
- Correctif Espressif _thread_local_start et _thread_local_end (PR 8030)
- Améliorer le benchmark des appareils Espressif (PR 8037)
- Introduire Espressif commun CONFIG_WOLFSSL_EXAMPLE_NAME, Kconfig (PR 7866)
- Ajoutez la prise en charge des esp-tls wolfSSL et du bundle de certificats pour Espressif ESP-IDF (PR 7936)
- Mettre à jour la version wolfssl pour Arduino (PR 7775)
Mises à jour post-quantiques sur la cryptographie
- Dilithium : prise en charge des tableaux de taille fixe dans dilithium_key (PR 7727)
- Dilithium : ajout d'une option pour utiliser le précalc avec petit signe (PR 7744)
- Autoriser Kyber à être construit avec FIPS (PR 7788)
- Autoriser l'utilisation de Kyber asm dans le module du noyau Linux (PR 7872)
- Dilithium, Kyber : mise à jour de la spécification finale (PR 7877)
- Dilithium : prise en charge des versions préliminaire et finale de FIPS 204 (PR 7909,8016)
Optimisations de l'assemblage ARM
- Optimisations de l'assemblage ARM32 ajoutées pour ChaCha20 et Poly1305 (PR 8020)
- Améliorations de l'optimisation de l'assemblage Poly1305 pour Aarch64 (PR 7859)
- Optimisations de l'assemblage Poly1305 ajoutées pour Thumb-2 (PR 7939)
- Ajout de l'option de construction ARM ASM à STM32CubePack (PR 7747)
- Ajouter ARM64 au projet Visual Studio (PR 8010)
- Optimisations de l'assemblage Kyber pour ARM32 et Aarch64 (PR 8040,7998)
- Optimisations de l'assemblage Kyber pour ARMv7E-M/ARMv7-M (PR 7706)
Correctifs
- Chargement de clé ECC : correctifs pour les certificats avec des paramètres qui ne sont pas ceux par défaut pour la taille (PR 7751)
- Correctifs pour la création de x86 dans Visual Studio pour les systèmes d'exploitation non Windows (PR 7884)
- Correction du rappel secret TLS v1.2, détectant incorrectement un mauvais secret principal (PR 7812)
- Correctifs pour l'utilisation de l'assemblage PowerPC avec Darwin et SP math all (PR 7931)
- Correctif pour détecter les anciennes versions de Mac OS lors de la tentative de liaison avec libdispatch (PR 7932)
- Correction de la rétrogradation de DTLS1.3 vers DTLS1.2 lorsque le serveur envoie plusieurs paquets de prise de contact combinés en une seule transmission. (RP 7840)
- Correction pour OCSP pour enregistrer la demande si elle était stockée dans ssl->ctx->certOcspRequest (PR 7779)
- Correction d'OCSP pour la recherche de CA par hachage de clé au lieu de ext. identifiant de clé (PR 7934)
- Correctif pour la mémoire statique et la version monothread (PR 7737)
- Correction pour ne pas autoriser Shake128/256 avec Xilinx AFALG (PR 7708)
- Correctif pour prendre en charge PKCS11 sans génération de clé RSA (PR 7738)
- Correction de l'absence d'appel du rappel de signature lors de l'utilisation des rappels PK + TLS 1.3 (PR 7761)
- Étiquette de correctif Cortex-M/Thumb2 ASM pour le compilateur IAR (PR 7753)
- Correction avec PKCS11 pour itérer correctement sur slotId (PR 7736)
- Arrêtez de supprimer l'en-tête de séquence sur l'extension AltSigAlg (PR 7710)
- Correction de ParseCRL_AuthKeyIdExt avec le modèle ASN pour définir la valeur extAuthKeyIdSet (PR 7742)
- Utiliser la longueur maximale de la clé pour la taille du tampon de chiffrement PSK (PR 7707)
- Correctif DTLS 1.3 pour la vérification de la taille afin d'inclure les correctifs d'en-têtes et de CID (PR 7912,7951)
- Corrigez STM32 Hash FIFO et ajoutez la prise en charge de STM32U5A9xx (PR 7787)
- Correction d'une erreur de build CMake pour les builds curl (PR 8021)
- SP Maths : correctif PowerPC ASM pour utiliser XOR au lieu de LI (PR 8038)
- Chargement SSL des clés/certificats : tests et correctifs (PR 7789)
- Divers. correctifs pour Dilithium et Kyber (PR 7721,7765,7803,8027,7904)
- Correctifs pour la création de sources wolfBoot pour PQ LMS/XMSS (PR 7868)
- Correctifs pour la construction avec Kyber activé à l'aide de CMake et du port zephyr (PR 7773)
- Correctif pour les cas extrêmes avec reprise de session avec TLS 1.2 (PR 8097)
- Correction d'un problème avec ARM ASM avec AES CFB/OFB n'initialisant pas le membre "gauche" (PR 8099)
Pour plus d'informations sur les vulnérabilités, visitez la page des vulnérabilités à l'adresse : https://www.wolfssl.com/docs/security-vulnerabilities/
Voir le fichier INSTALL pour les instructions de construction. Plus d'informations peuvent être trouvées en ligne sur : https://wolfssl.com/wolfSSL/Docs.html
Ressources
Site Web wolfSSL
Wiki WolfSSL
FAQ FIPS 140-2/140-3
Documentation wolfSSL
Manuel wolfSSL
Référence de l'API wolfSSL
Référence de l'API wolfCrypt
TLS1.3
Vulnérabilités wolfSSL
Exemples supplémentaires de wolfSSL
Structure du répertoire
├── 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]