Biblioteca SSL/TLS integrada de wolfSSL
La biblioteca SSL integrada wolfSSL (anteriormente CyaSSL) es una biblioteca SSL/TLS liviana escrita en ANSI C y dirigida a entornos integrados, RTOS y con recursos limitados, principalmente debido a su pequeño tamaño, velocidad y conjunto de funciones. También se utiliza comúnmente en entornos operativos estándar debido a su precio libre de regalías y su excelente soporte multiplataforma. wolfSSL admite estándares de la industria hasta los actuales TLS 1.3 y DTLS 1.3, es hasta 20 veces más pequeño que OpenSSL y ofrece cifrados progresivos como ChaCha20, Curve25519, Blake2b y grupos Post-Quantum TLS 1.3. Las evaluaciones comparativas y los comentarios de los usuarios informan un rendimiento dramáticamente mejor cuando se usa wolfSSL en lugar de OpenSSL.
wolfSSL funciona con la biblioteca de criptografía wolfCrypt. Se han validado dos versiones de wolfCrypt según FIPS 140-2 (certificado n.° 2425 y certificado n.° 3389). La validación FIPS 140-3 está en curso. Para obtener información adicional, visite las preguntas frecuentes sobre FIPS de wolfCrypt o comuníquese con [email protected].
¿Por qué elegir wolfSSL?
Hay muchas razones para elegir wolfSSL como su solución SSL/TLS integrada, de escritorio, móvil o empresarial. Algunas de las principales razones incluyen el tamaño (los tamaños de huella típicos oscilan entre 20 y 100 kB), compatibilidad con los estándares más nuevos (SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3, DTLS 1.0, DTLS 1.2 y DTLS 1.3). , soporte de cifrado actual y progresivo (incluidos cifrados de flujo), multiplataforma, libre de regalías y una API de compatibilidad con OpenSSL para facilitar la migración a aplicaciones existentes que han utilizado previamente el paquete OpenSSL. Para obtener una lista completa de funciones, consulte el Capítulo 4 del manual de wolfSSL.
Notas, por favor lea
Nota 1
wolfSSL a partir de 3.6.6 ya no habilita SSLv3 de forma predeterminada. wolfSSL tampoco admite conjuntos de cifrado de claves estáticas con PSK, RSA o ECDH. Esto significa que si planea utilizar conjuntos de cifrado TLS, debe habilitar DH (DH está activado de forma predeterminada), o habilitar ECC (ECC está activado de forma predeterminada), o debe habilitar conjuntos de cifrado de clave estática con una o más de las siguientes definiciones:
WOLFSSL_STATIC_DH
WOLFSSL_STATIC_RSA
WOLFSSL_STATIC_PSK
Aunque los conjuntos de cifrado de claves estáticas están en desuso y se eliminarán de futuras versiones de TLS. También reducen su seguridad al eliminar PFS.
Al compilar ssl.c
, wolfSSL ahora emitirá un error de compilación si no hay conjuntos de cifrado disponibles. Puede eliminar este error definiendo WOLFSSL_ALLOW_NO_SUITES
en caso de que así lo desee, es decir, no esté utilizando conjuntos de cifrado TLS.
Nota 2
wolfSSL adopta un enfoque diferente para la verificación de certificados que OpenSSL. La política predeterminada para el cliente es verificar el servidor, esto significa que si no carga las CA para verificar el servidor, obtendrá un error de conexión, sin error de firmante para confirmar el error (-188).
Si desea imitar el comportamiento de OpenSSL de que SSL_connect
tenga éxito incluso si falla la verificación del servidor y se reduce la seguridad, puede hacerlo llamando a:
wolfSSL_CTX_set_verify ( ctx , WOLFSSL_VERIFY_NONE , NULL );
antes de llamar wolfSSL_new();
. Aunque no es recomendable.
Nota 3
Los valores de enumeración SHA, SHA256, SHA384, SHA512 ya no están disponibles cuando wolfSSL se crea con --enable-opensslextra
( OPENSSL_EXTRA
) o con la macro NO_OLD_SHA_NAMES
. Estos nombres se asignan a la API de OpenSSL para una función hash de llamada única. En su lugar, se deben utilizar los nombres WC_SHA
, WC_SHA256
, WC_SHA384
y WC_SHA512
para el nombre de enumeración.
Versión 5.7.4 de wolfSSL (24 de octubre de 2024)
La versión 5.7.4 se desarrolló de acuerdo con el proceso de desarrollo y control de calidad de wolfSSL (consulte el enlace a continuación) y superó con éxito los criterios de calidad. https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
NOTA: * --enable-heapmath está en desuso y se eliminará a finales de 2024
PR significa Pull Request y PR hace referencia a un número de solicitud de extracción de GitHub donde se agregó el cambio de código.
Vulnerabilidades
- [Bajo] Cuando la capa de compatibilidad OpenSSL está habilitada, la verificación de certificados se comportaba de manera diferente en wolfSSL que en OpenSSL, en las implementaciones X509_STORE_add_cert() y X509_STORE_load_locations(). Anteriormente, en los casos en que una aplicación cargaba explícitamente un certificado intermedio, wolfSSL verificaba solo hasta ese certificado intermedio, en lugar de verificar hasta la CA raíz. Esto solo afecta los casos de uso en los que se llama directamente a la API y no afecta las conexiones TLS. Se recomienda a los usuarios que llaman a la API X509_STORE_add_cert() o X509_STORE_load_locations() directamente en sus aplicaciones que actualicen la versión de wolfSSL utilizada o que realicen comprobaciones de seguridad adicionales en los certificados cargados en X509_STORE al verificar un certificado. (#8087)
Corrección de compilación experimental de PQC TLS
- Cuando se utiliza TLS con algoritmos poscuánticos habilitados, la conexión utiliza una curva EC más pequeña que la acordada. Se recomienda a los usuarios que compilan con --enable-experimental y habilitan conjuntos de cifrado PQC con conexiones TLS que actualicen la versión de wolfSSL utilizada. Gracias a Daniel Correa por el informe. (#8084)
Nuevas funciones adicionales
- Se agregaron 64 nuevas optimizaciones de ensamblaje de RISC-V para SHA-256, SHA-512, ChaCha20, Poly1305 y SHA-3 (PR 7758,7833,7818,7873,7916)
- Implementar soporte para ID de conexión (CID) con DTLS 1.2 (PR 7995)
- Agregue soporte para bibliotecas (DevkitPro) (PR 7990)
- Agregar puerto para Mosquitto OSP (Proyecto de código abierto) (PR 6460)
- Agregar puerto para init sssd (PR 7781)
- Agregar puerto para eXosip2 (PR 7648)
- Agregue soporte para STM32G4 (PR 7997)
- Agregue soporte para MAX32665 y MAX32666 TPU HW y ARM ASM Crypto Callback Support (PR 7777)
- Agregue soporte para compilar wolfSSL para usarlo en libspdm (PR 7869)
- Agregar puerto para usar con Nucleus Plus 2.3 (PR 7732)
- Soporte inicial para certificados de atributos RFC5755 x509 (acerts). Habilitado con --enable-acert (PR 7926)
- La descarga de relleno RSA de PKCS#11 permite que los tokens realicen CKM_RSA_PKCS (firmar/cifrar), CKM_RSA_PKCS_PSS (firmar) y CKM_RSA_PKCS_OAEP (cifrar). (PR 7750)
- Se agregaron funciones de estilo "nuevo" y "eliminar" para la asignación de montón/grupo y la liberación de estructuras criptográficas de bajo nivel (PR 3166 y 8089).
Mejoras y optimizaciones
- Aumentar la altitud máxima predeterminada. nombres del 128 al 1024 (PR 7762)
- Se agregó una nueva función de acuerdo DH de tiempo constante wc_DhAgree_ct (PR 7802)
- Capa de compatibilidad ampliada con la API EVP_PKEY_is_a (PR 7804)
- Agregue la opción para deshabilitar la prueba del software de prueba cryptocb usando --disable-cryptocb-sw-test (PR 7862)
- Agregar una llamada para verificar el certificado de devolución de llamada antes de verificar las fechas del certificado (PR 7895)
- Algoritmos ampliados compatibles con el contenedor wolfCrypt CSharp. Agregar soporte para RNG, ECC (ECIES y ECDHE), RSA, ED25519/Curve25519, AES-GCM y Hashing (PR 3166)
- Ampliar el soporte de MMCAU para su uso con DES ECB (PR 7960)
- Actualice AES SIV para manejar múltiples entradas de datos asociadas (PR 7911)
- Elimine HAVE_NULL_CIPHER de --enable-openssh (PR 7811)
- Se eliminaron comprobaciones duplicadas if(NULL) al llamar a XFREE (la macro lo hace) (PR 7839)
- Establezca el valor predeterminado RSA_MIN_SIZE en 2048 bits (PR 7923)
- Se agregó soporte para que wolfSSL se use como TLS predeterminado en el kernel zephyr (PR 7731)
- Agregue la compilación del proveedor de habilitación usando --enable-wolfprovider con autotools (PR 7550)
- Soporte Renesas RX TSIP ECDSA (PR 7685)
- Admite la degradación de DTLS1.3 cuando el servidor admite CID (PR 7841)
- El lado del servidor comprueba OCSP incluso si utiliza v2 multi (PR 7828)
- Agregar manejo de parámetros hash ausentes en el análisis y creación de paquetes PKCS7 (PR 7845)
- Agregue el uso de w64wrapper para Poly1305, lo que permite utilizar Poly1305 en entornos que no tienen un tipo word64 (PR 7759)
- Actualización al soporte maxq10xx (PR 7824)
- Agregue soporte para analizar atributos PKCS8 opcionales (PR 7944)
- Agregue soporte para cualquier método lateral con DTLS 1.3 (PR 8012)
- Se agregó compatibilidad con PKCS7 PEM para analizar datos PEM con BEGIN/END PKCS7 (PR 7704)
- Agregue soporte de CMake para WOLFSSL_CUSTOM_CURVES (PR 7962)
- Agregue compatibilidad con coincidencias de comodines más a la izquierda a X509_check_host() (PR 7966)
- Agregue la opción para configurar SKID personalizado con la creación del paquete PKCS7 (PR 7954)
- Creación de wolfSSL como biblioteca con Ada y correcciones al manifiesto de Alire (PR 7303,7940)
- Soporte Renesas RX72N actualizado (PR 7849)
- Nueva opción WOLFSSL_COPY_KEY agregada para copiar siempre la clave al objeto SSL (PR 8005)
- Agregue la nueva opción WOLFSSL_COPY_CERT para copiar siempre el búfer de certificado para cada objeto SSL (PR 7867)
- Agregue una opción para usar AES-CBC con HMAC para la codificación/descodificación del ticket de sesión predeterminado. El valor predeterminado es AES-128-CBC con HMAC-SHA256 (PR 7703)
- Mejoras en el uso de memoria en wc_PRF, sha256 (para código pequeño cuando hay muchos registros disponibles) y objetos sp_int (PR 7901)
- Cambie el script de configuración para solucionar ">>" sin comando. En /bin/sh anterior puede ser ambiguo, como se usa en sistemas operativos como FreeBSD 9.2 (PR 7876)
- No intente incluir encabezados del sistema cuando no sea necesario (PR 7813)
- Certificados: ahora se permite que la codificación DER del parámetro del algoritmo de firma ECC sea NULL con una definición (PR 7903)
- SP x86_64 asm: verifique la compatibilidad con AVX2 para máquinas virtuales (PR 7979)
- Actualice el soporte de rx64n en gr-rose (PR 7889)
- Actualice la versión de FSP a v5.4.0 para RA6M4 (PR 7994)
- Actualice la versión del controlador TSIP a v1.21 para RX65N RSK (PR 7993)
- Agregue una nueva devolución de llamada criptográfica para RSA con relleno (PR 7907)
- Se reemplazó el uso de pqm4 con implementaciones wolfSSL de Kyber/MLDSA (PR 7924)
- Soporte de barrera de memoria modernizado para C11 y clang (PR 7938)
- Agregar una devolución de llamada de anulación de error de CRL (PR 7986)
- Ampliar la devolución de llamada de extensión desconocida X509 para usarla con un contexto de usuario (PR 7730)
- Seguimiento de errores de depuración adicional agregado con TLS (PR 7917)
- Se agregó soporte de tiempo de ejecución para seguimientos de pila de llamadas de biblioteca con –enable-debug-trace-errcodes=backtrace, usando libbacktrace (PR 7846)
- Cumplimiento ampliado de C89 (PR 8077)
- Soporte ampliado para WOLFSSL_NO_MALLOC (PR 8065)
- Se agregó soporte para la compilación cruzada del módulo del kernel de Linux (PR 7746)
- Módulo de kernel de Linux actualizado con soporte para kernel 6.11 y 6.12 (PR 7826)
- Introduzca WOLFSSL_ASN_ALLOW_0_SERIAL para permitir el análisis de certificados con un número de serie de 0 (PR 7893)
- Agregue repository_owner condicional a todos los flujos de trabajo de wolfSSL GitHub (PR 7871)
Actualizaciones de Espressif/Arduino
- Actualice wolfcrypt settings.h para Espressif ESP-IDF, actualización de plantilla (PR 7953)
- Actualizar Espressif sha, util, mem, time helpers (PR 7955)
- Corrección de Espressif _thread_local_start y _thread_local_end (PR 8030)
- Mejorar el punto de referencia para dispositivos Espressif (PR 8037)
- Introducir Espressif común CONFIG_WOLFSSL_EXAMPLE_NAME, Kconfig (PR 7866)
- Agregue wolfSSL esp-tls y soporte de paquete de certificados para Espressif ESP-IDF (PR 7936)
- Actualización de la versión wolfssl para Arduino (PR 7775)
Actualizaciones posteriores a las criptomonedas cuánticas
- Dilithium: admite matrices de tamaño fijo en dilithium_key (PR 7727)
- Dilithium: agregar opción para usar precálculo con signo pequeño (PR 7744)
- Permitir que Kyber se construya con FIPS (PR 7788)
- Permitir que Kyber asm se utilice en el módulo del kernel de Linux (PR 7872)
- Dilithium, Kyber: actualización de la especificación final (PR 7877)
- Dilithium: compatible con el borrador y el borrador final de FIPS 204 (PR 7909,8016)
Optimizaciones de ensamblaje ARM
- Se agregaron optimizaciones de ensamblaje ARM32 para ChaCha20 y Poly1305 (PR 8020)
- Mejoras en las optimizaciones del ensamblaje Poly1305 para Aarch64 (PR 7859)
- Se agregaron optimizaciones de ensamblaje Poly1305 para Thumb-2 (PR 7939)
- Agregar la opción de compilación ARM ASM a STM32CubePack (PR 7747)
- Agregue ARM64 al proyecto de Visual Studio (PR 8010)
- Optimizaciones de ensamblaje Kyber para ARM32 y Aarch64 (PR 8040,7998)
- Optimizaciones de ensamblaje Kyber para ARMv7E-M/ARMv7-M (PR 7706)
Correcciones
- Carga de claves ECC: correcciones para certificados con parámetros que no son predeterminados para el tamaño (PR 7751)
- Correcciones para compilar x86 en Visual Studio para sistemas operativos que no son Windows (PR 7884)
- Solución para la devolución de llamada secreta de TLS v1.2, que detecta incorrectamente un secreto maestro incorrecto (PR 7812)
- Correcciones para el uso del ensamblaje de PowerPC con Darwin y SP Math All (PR 7931)
- Solución para detectar versiones anteriores de Mac OS al intentar vincularse con libdispatch (PR 7932)
- Se corrigió la degradación de DTLS1.3 a DTLS1.2 cuando el servidor envía múltiples paquetes de protocolo de enlace combinados en una sola transmisión. (PR 7840)
- Corrección para que OCSP guarde la solicitud si estaba almacenada en ssl->ctx->certOcspRequest (PR 7779)
- Se corrigió el problema en OCSP para buscar CA mediante hash de clave en lugar de ext. ID de clave (PR 7934)
- Corrección de memoria estática y compilación de subproceso único (PR 7737)
- Solución para no permitir Shake128/256 con Xilinx AFALG (PR 7708)
- Corrección para admitir PKCS11 sin generación de clave RSA (PR 7738)
- Se solucionó el problema de no llamar a la devolución de llamada de firma cuando se usan devoluciones de llamada PK + TLS 1.3 (PR 7761)
- Etiqueta de corrección ASM Cortex-M/Thumb2 para el compilador IAR (PR 7753)
- Corrección con PKCS11 para iterar correctamente sobre slotId (PR 7736)
- Deje de eliminar el encabezado de secuencia en la extensión AltSigAlg (PR 7710)
- Corrija ParseCRL_AuthKeyIdExt con la plantilla ASN para establecer el valor de extAuthKeyIdSet (PR 7742)
- Utilice la longitud máxima de clave para el tamaño del búfer de cifrado PSK (PR 7707)
- Corrección de DTLS 1.3 para la verificación de tamaño para incluir encabezados y correcciones de CID (PR 7912,7951)
- Repare STM32 Hash FIFO y agregue soporte para STM32U5A9xx (PR 7787)
- Solucionar el error de compilación de CMake para compilaciones curl (PR 8021)
- SP Maths: Corrección de PowerPC ASM para usar XOR en lugar de LI (PR 8038)
- Carga SSL de claves/certificados: pruebas y correcciones (PR 7789)
- Varios. correcciones para Dilithium y Kyber (PR 7721,7765,7803,8027,7904)
- Correcciones para crear fuentes wolfBoot para PQ LMS/XMSS (PR 7868)
- Correcciones para compilar con Kyber habilitado usando CMake y el puerto zephyr (PR 7773)
- Solución para casos extremos con reanudación de sesión con TLS 1.2 (PR 8097)
- Se solucionó el problema con ARM ASM con AES CFB/OFB que no inicializaba el miembro "izquierdo" (PR 8099)
Para obtener información adicional sobre vulnerabilidades, visite la página de vulnerabilidad en: https://www.wolfssl.com/docs/security-vulnerabilities/
Consulte el archivo INSTALAR para obtener instrucciones de compilación. Puede encontrar más información en línea en: https://wolfssl.com/wolfSSL/Docs.html
Recursos
Sitio web wolfSSL
Wiki WolfSSL
Preguntas frecuentes sobre FIPS 140-2/140-3
Documentación wolfSSL
Manual WolfSSL
Referencia de la API wolfSSL
Referencia de la API de wolfCrypt
TLS 1.3
Vulnerabilidades de wolfSSL
Ejemplos adicionales de wolfSSL
Estructura del directorio
├── 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]