wolfSSL Eingebettete SSL/TLS-Bibliothek
Die eingebettete SSL-Bibliothek wolfSSL (ehemals CyaSSL) ist eine schlanke SSL/TLS-Bibliothek, die in ANSI C geschrieben wurde und für eingebettete, RTOS- und ressourcenbeschränkte Umgebungen gedacht ist – vor allem aufgrund ihrer geringen Größe, Geschwindigkeit und ihres Funktionsumfangs. Aufgrund der lizenzfreien Preise und der hervorragenden plattformübergreifenden Unterstützung wird es häufig auch in Standardbetriebsumgebungen verwendet. wolfSSL unterstützt Industriestandards bis zum aktuellen TLS 1.3 und DTLS 1.3, ist bis zu 20-mal kleiner als OpenSSL und bietet progressive Chiffren wie ChaCha20, Curve25519, Blake2b und Post-Quantum TLS 1.3-Gruppen. Benutzer-Benchmarking und Feedback berichten von einer deutlich besseren Leistung bei der Verwendung von wolfSSL gegenüber OpenSSL.
wolfSSL basiert auf der Kryptografiebibliothek wolfCrypt. Zwei Versionen von wolfCrypt wurden FIPS 140-2-validiert (Zertifikat Nr. 2425 und Zertifikat Nr. 3389). Die FIPS 140-3-Validierung ist im Gange. Für weitere Informationen besuchen Sie die FIPS-FAQ zu wolfCrypt oder wenden Sie sich an [email protected].
Warum wolfSSL wählen?
Es gibt viele Gründe, sich für wolfSSL als eingebettete, Desktop-, Mobil- oder Unternehmens-SSL/TLS-Lösung zu entscheiden. Zu den Hauptgründen gehören die Größe (typische Footprint-Größen liegen zwischen 20 und 100 kB) und die Unterstützung der neuesten Standards (SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3, DTLS 1.0, DTLS 1.2 und DTLS 1.3). , aktuelle und progressive Verschlüsselungsunterstützung (einschließlich Stream-Verschlüsselung), plattformübergreifend, lizenzgebührenfrei und eine OpenSSL-Kompatibilitäts-API, um die Portierung in bestehende Anwendungen zu erleichtern, die zuvor das OpenSSL-Paket verwendet haben. Eine vollständige Funktionsliste finden Sie in Kapitel 4 des wolfSSL-Handbuchs.
Hinweise, bitte lesen
Hinweis 1
wolfSSL ab 3.6.6 aktiviert SSLv3 nicht mehr standardmäßig. wolfSSL unterstützt außerdem keine statischen Schlüssel-Cipher-Suites mit PSK, RSA oder ECDH mehr. Das heißt, wenn Sie TLS-Verschlüsselungssammlungen verwenden möchten, müssen Sie DH aktivieren (DH ist standardmäßig aktiviert) oder ECC aktivieren (ECC ist standardmäßig aktiviert) oder Sie müssen Verschlüsselungssammlungen mit statischen Schlüsseln mit einer oder mehreren der folgenden Definitionen aktivieren:
WOLFSSL_STATIC_DH
WOLFSSL_STATIC_RSA
WOLFSSL_STATIC_PSK
Allerdings sind Verschlüsselungssammlungen mit statischen Schlüsseln veraltet und werden aus zukünftigen Versionen von TLS entfernt. Sie verringern auch Ihre Sicherheit, indem Sie PFS entfernen.
Beim Kompilieren ssl.c
gibt wolfSSL nun einen Compilerfehler aus, wenn keine Cipher Suites verfügbar sind. Sie können diesen Fehler beheben, indem Sie WOLFSSL_ALLOW_NO_SUITES
definieren, falls Sie dies wünschen, dh wenn Sie keine TLS-Verschlüsselungssammlungen verwenden.
Hinweis 2
wolfSSL verfolgt bei der Zertifikatsüberprüfung einen anderen Ansatz als OpenSSL. Die Standardrichtlinie für den Client besteht darin, den Server zu überprüfen. Das heißt, wenn Sie keine Zertifizierungsstellen laden, um den Server zu überprüfen, erhalten Sie einen Verbindungsfehler und keinen Unterzeichnerfehler zur Bestätigung des Fehlers (-188).
Wenn Sie das OpenSSL-Verhalten nachahmen möchten, bei dem SSL_connect
auch dann erfolgreich ist, wenn die Überprüfung des Servers fehlschlägt und die Sicherheit verringert wird, können Sie dies tun, indem Sie Folgendes aufrufen:
wolfSSL_CTX_set_verify ( ctx , WOLFSSL_VERIFY_NONE , NULL );
vor dem Aufruf von wolfSSL_new();
. Obwohl es nicht empfohlen wird.
Hinweis 3
Die Enum-Werte SHA, SHA256, SHA384, SHA512 sind nicht mehr verfügbar, wenn wolfSSL mit --enable-opensslextra
( OPENSSL_EXTRA
) oder mit dem Makro NO_OLD_SHA_NAMES
erstellt wird. Diese Namen werden der OpenSSL-API für eine einzelne Aufruf-Hash-Funktion zugeordnet. Stattdessen sollten die Namen WC_SHA
, WC_SHA256
, WC_SHA384
und WC_SHA512
für den Enum-Namen verwendet werden.
wolfSSL Release 5.7.4 (24. Okt. 2024)
Release 5.7.4 wurde gemäß dem Entwicklungs- und Qualitätssicherungsprozess von wolfSSL (siehe Link unten) entwickelt und hat die Qualitätskriterien erfolgreich bestanden. https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
HINWEIS: * --enable-heapmath ist veraltet und wird bis Ende 2024 entfernt
PR steht für Pull Request und PR verweist auf eine GitHub-Pull-Request-Nummer, unter der die Codeänderung hinzugefügt wurde.
Schwachstellen
- [Niedrig] Wenn die OpenSSL-Kompatibilitätsschicht aktiviert ist, verhält sich die Zertifikatsüberprüfung in wolfSSL anders als in OpenSSL, in den Implementierungen X509_STORE_add_cert() und X509_STORE_load_locations(). Bisher führte wolfSSL in Fällen, in denen eine Anwendung explizit ein Zwischenzertifikat lud, nur bis zu diesem Zwischenzertifikat und nicht bis zur Stammzertifizierungsstelle durch. Dies betrifft nur Anwendungsfälle, bei denen die API direkt aufgerufen wird, und hat keine Auswirkungen auf TLS-Verbindungen. Benutzern, die die API X509_STORE_add_cert() oder (#8087)
Experimenteller Build-Fix für PQC TLS
- Bei Verwendung von TLS mit aktivierten Post-Quantenalgorithmen verwendet die Verbindung eine kleinere EC-Kurve als vereinbart. Benutzern, die mit --enable-experimental erstellen und PQC-Cipher-Suites mit TLS-Verbindungen aktivieren, wird empfohlen, die verwendete Version von wolfSSL zu aktualisieren. Vielen Dank an Daniel Correa für den Bericht. (#8084)
Neue Funktionserweiterungen
- RISC-V 64 neue Assembly-Optimierungen für SHA-256, SHA-512, ChaCha20, Poly1305 und SHA-3 hinzugefügt (PR 7758,7833,7818,7873,7916)
- Implementieren Sie die Unterstützung für Verbindungs-ID (CID) mit DTLS 1.2 (PR 7995).
- Unterstützung für (DevkitPro)libnds hinzufügen (PR 7990)
- Port für Mosquitto OSP (Open Source Project) hinzufügen (PR 6460)
- Port für Init SSSD hinzufügen (PR 7781)
- Port für eXosip2 hinzufügen (PR 7648)
- Unterstützung für STM32G4 hinzufügen (PR 7997)
- Unterstützung für MAX32665 und MAX32666 TPU HW und ARM ASM Crypto Callback Support hinzufügen (PR 7777)
- Unterstützung für die Erstellung von wolfSSL zur Verwendung in libspdm hinzufügen (PR 7869)
- Port zur Verwendung mit Nucleus Plus 2.3 hinzufügen (PR 7732)
- Erste Unterstützung für RFC5755 x509-Attributzertifikate (acerts). Aktiviert mit --enable-acert (PR 7926)
- Mit PKCS#11 RSA Padding Offload können Token CKM_RSA_PKCS (Signieren/Verschlüsselung), CKM_RSA_PKCS_PSS (Signieren) und CKM_RSA_PKCS_OAEP (Verschlüsselung) ausführen. (PR 7750)
- „Neu“- und „Löschen“-Stilfunktionen für Heap-/Pool-Zuweisung und Freigabe von Kryptostrukturen auf niedriger Ebene hinzugefügt (PR 3166 und 8089)
Verbesserungen und Optimierungen
- Erhöhen Sie die Standard-Maximalhöhe. Namen von 128 bis 1024 (PR 7762)
- Neue DH-Zustimmungsfunktion für konstante Zeit hinzugefügt wc_DhAgree_ct (PR 7802)
- Erweiterte Kompatibilitätsschicht mit der API EVP_PKEY_is_a (PR 7804)
- Option zum Deaktivieren des Cryptocb-Testsoftwaretests mit --disable-cryptocb-sw-test hinzufügen (PR 7862)
- Fügen Sie einen Rückruf zur Zertifikatsüberprüfung hinzu, bevor Sie die Zertifikatsdaten überprüfen (PR 7895)
- Erweiterte Algorithmen, die mit dem wolfCrypt CSharp-Wrapper unterstützt werden. Unterstützung für RNG, ECC (ECIES und ECDHE), RSA, ED25519/Curve25519, AES-GCM und Hashing (PR 3166) hinzugefügt.
- Erweitern Sie die MMCAU-Unterstützung für die Verwendung mit DES ECB (PR 7960).
- AES SIV aktualisieren, um mehrere zugehörige Dateneingaben zu verarbeiten (PR 7911)
- Entfernen Sie HAVE_NULL_CIPHER aus --enable-openssh (PR 7811)
- Doppelte if(NULL)-Prüfungen beim Aufruf von XFREE entfernt (Makro funktioniert) (PR 7839)
- Setzen Sie RSA_MIN_SIZE standardmäßig auf 2048 Bit (PR 7923).
- Unterstützung für die Verwendung von wolfSSL als Standard-TLS im Zephyr-Kernel hinzugefügt (PR 7731)
- Enable-Provider-Build mit --enable-wolfprovider mit Autotools hinzufügen (PR 7550)
- Renesas RX TSIP ECDSA-Unterstützung (PR 7685)
- Unterstützt DTLS1.3-Downgrade, wenn der Server CID unterstützt (PR 7841)
- Serverseitig überprüft OCSP, auch wenn v2 multi verwendet wird (PR 7828)
- Behandlung fehlender Hash-Parameter beim Parsen und Erstellen von PKCS7-Bundles hinzugefügt (PR 7845)
- Fügen Sie die Verwendung von w64wrapper für Poly1305 hinzu, sodass Poly1305 in Umgebungen verwendet werden kann, die keinen Word64-Typ haben (PR 7759).
- Update zur maxq10xx-Unterstützung (PR 7824)
- Unterstützung für das Parsen über optionale PKCS8-Attribute hinzufügen (PR 7944)
- Unterstützung für beide Seitenmethoden mit DTLS 1.3 hinzufügen (PR 8012)
- PKCS7 PEM-Unterstützung für das Parsen von PEM-Daten mit BEGIN/END PKCS7 hinzugefügt (PR 7704)
- CMake-Unterstützung für WOLFSSL_CUSTOM_CURVES hinzufügen (PR 7962)
- Unterstützung für die Wildcard-Übereinstimmung ganz links zu X509_check_host() hinzufügen (PR 7966)
- Option zum Festlegen einer benutzerdefinierten SKID bei der PKCS7-Bundle-Erstellung hinzugefügt (PR 7954)
- Aufbau von wolfSSL als Bibliothek mit Ada und Korrekturen am Alire-Manifest (PR 7303,7940)
- Renesas RX72N-Unterstützung aktualisiert (PR 7849)
- Neue Option WOLFSSL_COPY_KEY hinzugefügt, um den Schlüssel immer in das SSL-Objekt zu kopieren (PR 8005)
- Fügen Sie die neue Option WOLFSSL_COPY_CERT hinzu, um den Zertifikatspuffer immer für jedes SSL-Objekt zu kopieren (PR 7867).
- Fügen Sie eine Option zur Verwendung von AES-CBC mit HMAC für die Standard-Sitzungsticket-Enc/Dec hinzu. Standardmäßig AES-128-CBC mit HMAC-SHA256 (PR 7703)
- Verbesserungen der Speichernutzung in wc_PRF-, sha256- (für kleinen Code, wenn viele Register verfügbar sind) und sp_int-Objekten (PR 7901)
- Änderung im Konfigurationsskript, um „>>“ ohne Befehl zu umgehen. In älteren /bin/sh kann es mehrdeutig sein, wie es in Betriebssystemen wie FreeBSD 9.2 (PR 7876) verwendet wird.
- Versuchen Sie nicht, Systemheader einzuschließen, wenn dies nicht erforderlich ist (PR 7813).
- Zertifikate: Die DER-Kodierung des ECC-Signaturalgorithmus-Parameters darf jetzt mit einer Definition NULL sein (PR 7903).
- SP x86_64 asm: Überprüfen Sie, ob AVX2-Unterstützung für VMs vorhanden ist (PR 7979)
- RX64n-Unterstützung auf gr-rose aktualisieren (PR 7889)
- Aktualisieren Sie die FSP-Version auf v5.4.0 für RA6M4 (PR 7994).
- Aktualisieren Sie die TSIP-Treiberversion auf v1.21 für RX65N RSK (PR 7993).
- Fügen Sie einen neuen Krypto-Callback für RSA mit Padding hinzu (PR 7907)
- Die Verwendung von pqm4 wurde durch wolfSSL-Implementierungen von Kyber/MLDSA ersetzt (PR 7924).
- Modernisierte Speicherzaun-Unterstützung für C11 und Clang (PR 7938)
- Fügen Sie einen CRL-Fehlerüberschreibungsrückruf hinzu (PR 7986)
- Erweitern Sie den X509-Rückruf für unbekannte Erweiterungen zur Verwendung mit einem Benutzerkontext (PR 7730).
- Zusätzliche Debug-Fehlerverfolgung mit TLS hinzugefügt (PR 7917)
- Laufzeitunterstützung für Bibliotheksaufruf-Stack-Traces mit –enable-debug-trace-errcodes=backtrace hinzugefügt, unter Verwendung von libbacktrace (PR 7846)
- Erweiterte C89-Konformität (PR 8077)
- Erweiterte Unterstützung für WOLFSSL_NO_MALLOC (PR 8065)
- Unterstützung für die Kreuzkompilierung des Linux-Kernelmoduls hinzugefügt (PR 7746)
- Aktualisiertes Linux-Kernelmodul mit Unterstützung für Kernel 6.11 und 6.12 (PR 7826)
- Führen Sie WOLFSSL_ASN_ALLOW_0_SERIAL ein, um das Parsen von Zertifikaten mit der Seriennummer 0 zu ermöglichen (PR 7893).
- Bedingten Repository_Owner zu allen wolfSSL-GitHub-Workflows hinzufügen (PR 7871)
Espressif / Arduino-Updates
- Aktualisieren Sie wolfcrypt Settings.h für Espressif ESP-IDF, Vorlagenaktualisierung (PR 7953)
- Aktualisierung der Espressif-Sha-, Util-, Mem- und Time-Helfer (PR 7955)
- Espressif _thread_local_start und _thread_local_end Fix (PR 8030)
- Benchmark für Espressif-Geräte verbessern (PR 8037)
- Einführung von Espressif common CONFIG_WOLFSSL_EXAMPLE_NAME, Kconfig (PR 7866)
- wolfSSL esp-tls und Zertifikatspaket-Unterstützung für Espressif ESP-IDF hinzufügen (PR 7936)
- Wolfssl-Release für Arduino aktualisieren (PR 7775)
Veröffentlichen Sie Quantum-Krypto-Updates
- Dilithium: Unterstützung von Arrays fester Größe in dilithium_key (PR 7727)
- Dilithium: Option zur Verwendung von Vorberechnung mit kleinem Vorzeichen hinzufügen (PR 7744)
- Kyber kann mit FIPS erstellt werden (PR 7788)
- Zulassen, dass Kyber asm im Linux-Kernelmodul verwendet wird (PR 7872)
- Dilithium, Kyber: Aktualisierung auf endgültige Spezifikation (PR 7877)
- Dilithium: Unterstützung von FIPS 204 Draft und Final Draft (PR 7909,8016)
ARM-Assembly-Optimierungen
- ARM32-Assembly-Optimierungen für ChaCha20 und Poly1305 hinzugefügt (PR 8020)
- Verbesserungen der Poly1305-Baugruppenoptimierungen für Aarch64 (PR 7859)
- Poly1305-Baugruppenoptimierungen für Thumb-2 hinzugefügt (PR 7939)
- Hinzufügen der ARM ASM-Build-Option zu STM32CubePack (PR 7747)
- ARM64 zum Visual Studio-Projekt hinzufügen (PR 8010)
- Kyber-Assembly-Optimierungen für ARM32 und Aarch64 (PR 8040,7998)
- Kyber-Assembly-Optimierungen für ARMv7E-M/ARMv7-M (PR 7706)
Korrekturen
- ECC-Schlüssellast: Korrekturen für Zertifikate mit Parametern, die für die Größe nicht standardmäßig sind (PR 7751)
- Korrekturen für die Erstellung von x86 in Visual Studio für Nicht-Windows-Betriebssysteme (PR 7884)
- Fehlerbehebung für TLS v1.2 Secret Callback, fehlerhafte Erkennung eines fehlerhaften Master Secrets (PR 7812)
- Korrekturen für die Verwendung von PowerPC-Assemblys mit Darwin und SP Math All (PR 7931)
- Fix zur Erkennung älterer Versionen von Mac OS beim Versuch, eine Verknüpfung mit libdispatch herzustellen (PR 7932)
- Behebung des Downgrades von DTLS1.3 auf DTLS1.2, wenn der Server mehrere Handshake-Pakete in einer einzigen Übertragung kombiniert sendet. (PR 7840)
- Fix für OCSP zum Speichern der Anfrage, wenn sie in ssl->ctx->certOcspRequest gespeichert wurde (PR 7779)
- Fehlerbehebung bei OCSP für die Suche nach CA anhand des Schlüssel-Hash statt ext. Schlüssel-ID (PR 7934)
- Fix für statischen Speicher und Singlethread-Build (PR 7737)
- Korrektur, um Shake128/256 mit Xilinx AFALG nicht zuzulassen (PR 7708)
- Fix zur Unterstützung von PKCS11 ohne RSA-Schlüsselgenerierung (PR 7738)
- Behebung, dass der Signierungsrückruf nicht aufgerufen wird, wenn PK-Rückrufe + TLS 1.3 verwendet werden (PR 7761)
- Cortex-M/Thumb2 ASM-Fix-Label für IAR-Compiler (PR 7753)
- Behebung mit PKCS11 zur korrekten Iteration über SlotId (PR 7736)
- Hören Sie auf, den Sequenzheader aus der AltSigAlg-Erweiterung zu entfernen (PR 7710).
- Korrigieren Sie ParseCRL_AuthKeyIdExt mit der ASN-Vorlage, um den extAuthKeyIdSet-Wert festzulegen (PR 7742).
- Maximale Schlüssellänge für PSK-Verschlüsselungspuffergröße verwenden (PR 7707)
- DTLS 1.3-Korrektur für die Größenprüfung, um Header- und CID-Korrekturen einzuschließen (PR 7912,7951)
- STM32-Hash-FIFO reparieren und Unterstützung für STM32U5A9xx hinzufügen (PR 7787)
- CMake-Build-Fehler für Curl-Builds beheben (PR 8021)
- SP Maths: PowerPC ASM-Fix zur Verwendung von XOR anstelle von LI (PR 8038)
- SSL-Laden von Schlüsseln/Zertifikaten: Tests und Korrekturen (PR 7789)
- Sonstiges Korrekturen für Dilithium und Kyber (PR 7721,7765,7803,8027,7904)
- Korrekturen für die Erstellung von wolfBoot-Quellen für PQ LMS/XMSS (PR 7868)
- Korrekturen für das Erstellen mit aktiviertem Kyber mithilfe von CMake und dem Zephyr-Port (PR 7773)
- Fix für Randfälle bei Sitzungswiederaufnahme mit TLS 1.2 (PR 8097)
- Behebung eines Problems mit ARM ASM, bei dem AES CFB/OFB das „linke“ Mitglied nicht initialisiert (PR 8099)
Weitere Informationen zu Sicherheitslücken finden Sie auf der Seite zu Sicherheitslücken unter: https://www.wolfssl.com/docs/security-vulnerabilities/
Anweisungen zum Erstellen finden Sie in der INSTALL-Datei. Weitere Informationen finden Sie online unter: https://wolfssl.com/wolfSSL/Docs.html
Ressourcen
wolfSSL-Website
wolfSSL-Wiki
Häufig gestellte Fragen zu FIPS 140-2/140-3
wolfSSL-Dokumentation
wolfSSL-Handbuch
wolfSSL-API-Referenz
wolfCrypt-API-Referenz
TLS 1.3
wolfSSL-Schwachstellen
Zusätzliche wolfSSL-Beispiele
Verzeichnisstruktur
├── 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]