Biblioteca SSL/TLS incorporada wolfSSL
A biblioteca SSL incorporada wolfSSL (anteriormente CyaSSL) é uma biblioteca SSL/TLS leve escrita em ANSI C e direcionada para ambientes incorporados, RTOS e com recursos limitados - principalmente devido ao seu pequeno tamanho, velocidade e conjunto de recursos. Ele também é comumente usado em ambientes operacionais padrão devido ao seu preço isento de royalties e excelente suporte multiplataforma. wolfSSL suporta padrões da indústria até os atuais TLS 1.3 e DTLS 1.3, é até 20 vezes menor que OpenSSL e oferece cifras progressivas como ChaCha20, Curve25519, Blake2b e grupos Post-Quantum TLS 1.3. O benchmarking e o feedback do usuário relatam um desempenho dramaticamente melhor ao usar o wolfSSL em vez do OpenSSL.
wolfSSL é alimentado pela biblioteca de criptografia wolfCrypt. Duas versões do wolfCrypt foram validadas pelo FIPS 140-2 (certificado nº 2425 e certificado nº 3389). A validação FIPS 140-3 está em andamento. Para obter informações adicionais, visite as Perguntas frequentes do wolfCrypt FIPS ou entre em contato com [email protected].
Por que escolher o wolfSSL?
Há muitos motivos para escolher o wolfSSL como sua solução SSL/TLS incorporada, para desktop, móvel ou empresarial. Alguns dos principais motivos incluem tamanho (os tamanhos típicos variam de 20 a 100 kB), suporte para os padrões mais recentes (SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3, DTLS 1.0, DTLS 1.2 e DTLS 1.3) , suporte de criptografia atual e progressivo (incluindo cifras de fluxo), multiplataforma, isento de royalties e uma API de compatibilidade OpenSSL para facilitar a portabilidade para aplicativos existentes que usaram anteriormente o pacote OpenSSL. Para uma lista completa de recursos, consulte o Capítulo 4 do manual wolfSSL.
Notas, por favor leia
Nota 1
wolfSSL a partir de 3.6.6 não habilita mais SSLv3 por padrão. O wolfSSL também não oferece mais suporte a conjuntos de criptografia de chave estática com PSK, RSA ou ECDH. Isso significa que se você planeja usar conjuntos de criptografia TLS, você deve ativar o DH (o DH está ativado por padrão) ou o ECC (o ECC está ativado por padrão), ou você deve ativar os conjuntos de criptografia de chave estática com uma ou mais das seguintes definições:
WOLFSSL_STATIC_DH
WOLFSSL_STATIC_RSA
WOLFSSL_STATIC_PSK
Embora os conjuntos de criptografia de chave estática estejam obsoletos e serão removidos de versões futuras do TLS. Eles também diminuem sua segurança removendo o PFS.
Ao compilar ssl.c
, o wolfSSL agora emitirá um erro do compilador se nenhum conjunto de criptografia estiver disponível. Você pode remover esse erro definindo WOLFSSL_ALLOW_NO_SUITES
caso deseje, ou seja, não esteja usando conjuntos de criptografia TLS.
Nota 2
O wolfSSL adota uma abordagem diferente para verificação de certificado do que o OpenSSL. A política padrão para o cliente é verificar o servidor, isso significa que se você não carregar CAs para verificar o servidor, receberá um erro de conexão, nenhum erro de signatário para confirmar a falha (-188).
Se você deseja imitar o comportamento do OpenSSL de ter SSL_connect
bem-sucedido, mesmo que a verificação do servidor falhe e reduza a segurança, você pode fazer isso chamando:
wolfSSL_CTX_set_verify ( ctx , WOLFSSL_VERIFY_NONE , NULL );
antes de chamar wolfSSL_new();
. Embora não seja recomendado.
Nota 3
Os valores enum SHA, SHA256, SHA384, SHA512 não estão mais disponíveis quando wolfSSL é construído com --enable-opensslextra
( OPENSSL_EXTRA
) ou com a macro NO_OLD_SHA_NAMES
. Esses nomes são mapeados para a API OpenSSL para uma função hash de chamada única. Em vez disso, os nomes WC_SHA
, WC_SHA256
, WC_SHA384
e WC_SHA512
devem ser usados para o nome da enumeração.
wolfSSL versão 5.7.4 (24 de outubro de 2024)
A versão 5.7.4 foi desenvolvida de acordo com o processo de desenvolvimento e controle de qualidade do wolfSSL (veja o link abaixo) e passou com sucesso nos critérios de qualidade. https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
NOTA: * --enable-heapmath está sendo obsoleto e será removido até o final de 2024
PR significa Pull Request e PR faz referência a um número de pull request do GitHub onde a alteração do código foi adicionada.
Vulnerabilidades
- [Baixo] Quando a camada de compatibilidade OpenSSL está habilitada, a verificação do certificado se comportou de maneira diferente no wolfSSL e no OpenSSL, nas implementações X509_STORE_add_cert() e X509_STORE_load_locations(). Anteriormente, nos casos em que um aplicativo carregava explicitamente um certificado intermediário, o wolfSSL verificava apenas até esse certificado intermediário, em vez de verificar até a CA raiz. Isso afeta apenas os casos de uso em que a API é chamada diretamente e não afeta as conexões TLS. Recomenda-se que os usuários que chamam a API X509_STORE_add_cert() ou X509_STORE_load_locations() diretamente em seus aplicativos atualizem a versão do wolfSSL usada ou façam verificações adicionais de integridade nos certificados carregados no X509_STORE ao verificar um certificado. (#8087)
Correção de compilação experimental PQC TLS
- Ao usar TLS com algoritmos pós-quânticos habilitados, a conexão usa uma curva EC menor do que o acordado. Recomenda-se que os usuários que estão construindo com --enable-experimental e habilitando conjuntos de cifras PQC com conexões TLS atualizem a versão do wolfSSL usada. Obrigado a Daniel Correa pelo relatório. (#8084)
Novas adições de recursos
- RISC-V 64 novas otimizações de montagem adicionadas para SHA-256, SHA-512, ChaCha20, Poly1305 e SHA-3 (PR 7758.7833.7818.7873.7916)
- Implementar suporte para Connection ID (CID) com DTLS 1.2 (PR 7995)
- Adicionar suporte para (DevkitPro)libnds (PR 7990)
- Adicionar porta para Mosquitto OSP (projeto de código aberto) (PR 6460)
- Adicionar porta para sssd de inicialização (PR 7781)
- Adicionar porta para eXosip2 (PR 7648)
- Adicionar suporte para STM32G4 (PR 7997)
- Adicionar suporte para MAX32665 e MAX32666 TPU HW e suporte de retorno de chamada criptográfica ARM ASM (PR 7777)
- Adicionado suporte para construção de wolfSSL para ser usado em libspdm (PR 7869)
- Adicionar porta para uso com Nucleus Plus 2.3 (PR 7732)
- Suporte inicial para certificados de atributos RFC5755 x509 (acerts). Habilitado com --enable-acert (PR 7926)
- O descarregamento de preenchimento RSA PKCS#11 permite que os tokens executem CKM_RSA_PKCS (assinar/criptografar), CKM_RSA_PKCS_PSS (assinar) e CKM_RSA_PKCS_OAEP (criptografar). (PR 7750)
- Adicionadas funções de estilo “novo” e “excluir” para alocação de heap/pool e liberação de estruturas criptográficas de baixo nível (PR 3166 e 8089)
Melhorias e otimizações
- Aumente o alt máximo padrão. nomes de 128 a 1024 (PR 7762)
- Adicionada nova função de acordo DH de tempo constante wc_DhAgree_ct (PR 7802)
- Camada de compatibilidade expandida com a API EVP_PKEY_is_a (PR 7804)
- Adicionada opção para desabilitar o teste de software de teste cryptocb usando --disable-cryptocb-sw-test (PR 7862)
- Adicionar uma chamada para verificação de certificado antes de verificar as datas do certificado (PR 7895)
- Algoritmos expandidos suportados com o wrapper wolfCrypt CSharp. Adicionando suporte para RNG, ECC (ECIES e ECDHE), RSA, ED25519/Curve25519, AES-GCM e Hashing (PR 3166)
- Expanda o suporte MMCAU para uso com DES ECB (PR 7960)
- Atualize o AES SIV para lidar com múltiplas entradas de dados associadas (PR 7911)
- Remover HAVE_NULL_CIPHER de --enable-openssh (PR 7811)
- Removidas verificações if(NULL) duplicadas ao chamar XFREE (macro faz) (PR 7839)
- Defina o padrão RSA_MIN_SIZE para 2.048 bits (PR 7923)
- Adicionado suporte para wolfSSL para ser usado como TLS padrão no kernel zephyr (PR 7731)
- Adicione a construção do provedor de ativação usando --enable-wolfprovider com autotools (PR 7550)
- Suporte Renesas RX TSIP ECDSA (PR 7685)
- Suporta downgrade de DTLS1.3 quando o servidor suporta CID (PR 7841)
- O lado do servidor verifica o OCSP mesmo se ele usar v2 multi (PR 7828)
- Adicionado tratamento de parâmetros de hash ausentes na análise e criação de pacote PKCS7 (PR 7845)
- Adicionado o uso do w64wrapper para Poly1305, possibilitando que o Poly1305 seja utilizado em ambientes que não possuem o tipo word64 (PR 7759)
- Atualização para suporte maxq10xx (PR 7824)
- Adicionado suporte para análise de atributos PKCS8 opcionais (PR 7944)
- Adicione suporte para qualquer método lateral com DTLS 1.3 (PR 8012)
- Adicionado suporte PKCS7 PEM para análise de dados PEM com BEGIN/END PKCS7 (PR 7704)
- Adicionar suporte CMake para WOLFSSL_CUSTOM_CURVES (PR 7962)
- Adicionar suporte de correspondência de curinga mais à esquerda para X509_check_host() (PR 7966)
- Adicionada opção para definir SKID personalizado com criação de pacote PKCS7 (PR 7954)
- Construindo wolfSSL como uma biblioteca com Ada e correções no manifesto Alire (PR 7303,7940)
- Suporte Renesas RX72N atualizado (PR 7849)
- Adicionada nova opção WOLFSSL_COPY_KEY para sempre copiar a chave para o objeto SSL (PR 8005)
- Adicione a nova opção WOLFSSL_COPY_CERT para sempre copiar o buffer de certificado para cada objeto SSL (PR 7867)
- Adicionada uma opção para usar AES-CBC com HMAC para ticket de sessão padrão enc/dec. O padrão é AES-128-CBC com HMAC-SHA256 (PR 7703)
- Melhorias no uso de memória em wc_PRF, sha256 (para código pequeno quando muitos registros estão disponíveis) e objetos sp_int (PR 7901)
- Altere o script de configuração para contornar ">>" sem nenhum comando. No antigo /bin/sh pode ser ambíguo, como usado em sistemas operacionais como o FreeBSD 9.2 (PR 7876)
- Não tente incluir cabeçalhos do sistema quando não for necessário (PR 7813)
- Certificados: a codificação DER do parâmetro do algoritmo de assinatura ECC agora pode ser NULL com uma definição (PR 7903)
- SP x86_64 asm: verifique o suporte AVX2 para VMs (PR 7979)
- Atualize o suporte rx64n no gr-rose (PR 7889)
- Atualize a versão FSP para v5.4.0 para RA6M4 (PR 7994)
- Atualize a versão do driver TSIP para v1.21 para RX65N RSK (PR 7993)
- Adicione um novo retorno de chamada criptográfico para RSA com preenchimento (PR 7907)
- Substituído o uso de pqm4 por implementações wolfSSL de Kyber/MLDSA (PR 7924)
- Suporte modernizado de limite de memória para C11 e clang (PR 7938)
- Adicionar um retorno de chamada de substituição de erro de CRL (PR 7986)
- Estender o retorno de chamada da extensão desconhecida X509 para uso com um contexto de usuário (PR 7730)
- Rastreamento de erros de depuração adicional adicionado com TLS (PR 7917)
- Adicionado suporte de tempo de execução para rastreamentos de pilha de chamadas de biblioteca com –enable-debug-trace-errcodes=backtrace, usando libbacktrace (PR 7846)
- Conformidade expandida com C89 (PR 8077)
- Suporte expandido para WOLFSSL_NO_MALLOC (PR 8065)
- Adicionado suporte para compilação cruzada do módulo do kernel Linux (PR 7746)
- Módulo do kernel Linux atualizado com suporte para kernel 6.11 e 6.12 (PR 7826)
- Introduzir WOLFSSL_ASN_ALLOW_0_SERIAL para permitir a análise de certificados com número de série 0 (PR 7893)
- Adicione opository_owner condicional a todos os fluxos de trabalho do GitHub wolfSSL (PR 7871)
Atualizações Espressif/Arduino
- Atualize wolfcrypt settings.h para Espressif ESP-IDF, atualização de modelo (PR 7953)
- Atualizar Espressif sha, util, mem, ajudantes de tempo (PR 7955)
- Correção Espressif _thread_local_start e _thread_local_end (PR 8030)
- Melhorar o benchmark para dispositivos Espressif (PR 8037)
- Apresente o Espressif CONFIG_WOLFSSL_EXAMPLE_NAME comum, Kconfig (PR 7866)
- Adicionar wolfSSL esp-tls e suporte a pacote de certificados para Espressif ESP-IDF (PR 7936)
- Atualização da versão wolfssl para Arduino (PR 7775)
Atualizações pós-Quantum Crypto
- Dilithium: suporta matrizes de tamanho fixo em dilithium_key (PR 7727)
- Dilítio: adicionar opção de uso de pré-cálculo com sinal pequeno (PR 7744)
- Permitir que Kyber seja construído com FIPS (PR 7788)
- Permitir que Kyber asm seja usado no módulo do kernel Linux (PR 7872)
- Dilithium, Kyber: atualização para especificação final (PR 7877)
- Dilithium: Suporte ao rascunho e rascunho final do FIPS 204 (PR 7909.8016)
Otimizações de montagem ARM
- Otimizações de montagem ARM32 adicionadas para ChaCha20 e Poly1305 (PR 8020)
- Melhorias nas otimizações de montagem Poly1305 para Aarch64 (PR 7859)
- Otimizações de montagem Poly1305 adicionadas para Thumb-2 (PR 7939)
- Adicionando opção de construção ARM ASM ao STM32CubePack (PR 7747)
- Adicionar ARM64 ao projeto do Visual Studio (PR 8010)
- Otimizações de montagem Kyber para ARM32 e Aarch64 (PR 8040,7998)
- Otimizações de montagem Kyber para ARMv7E-M/ARMv7-M (PR 7706)
Correções
- Carregamento de chave ECC: correções para certificados com parâmetros que não são padrão para tamanho (PR 7751)
- Correções para construção de x86 no Visual Studio para sistemas operacionais não Windows (PR 7884)
- Correção para retorno de chamada secreto TLS v1.2, detectando incorretamente segredo mestre inválido (PR 7812)
- Correções para uso de montagem PowerPC com Darwin e SP math all (PR 7931)
- Correção para detectar versões mais antigas do Mac OS ao tentar vincular com libdispatch (PR 7932)
- Correção para downgrade de DTLS1.3 para DTLS1.2 quando o servidor envia vários pacotes de handshake combinados em uma única transmissão. (PR 7840)
- Correção para OCSP salvar a solicitação se ela foi armazenada em ssl->ctx->certOcspRequest (PR 7779)
- Correção no OCSP para procurar CA por hash de chave em vez de ramal. ID da chave (PR 7934)
- Correção para memória estática e compilação singlethread (PR 7737)
- Correção para não permitir Shake128/256 com Xilinx AFALG (PR 7708)
- Correção para suportar PKCS11 sem geração de chave RSA (PR 7738)
- Correção de não chamar o retorno de chamada de assinatura ao usar retornos de chamada PK + TLS 1.3 (PR 7761)
- Etiqueta de correção Cortex-M/Thumb2 ASM para compilador IAR (PR 7753)
- Correção com PKCS11 para iterar corretamente sobre slotId (PR 7736)
- Pare de remover o cabeçalho de sequência na extensão AltSigAlg (PR 7710)
- Corrija ParseCRL_AuthKeyIdExt com modelo ASN para definir o valor extAuthKeyIdSet (PR 7742)
- Use o comprimento máximo da chave para o tamanho do buffer de criptografia PSK (PR 7707)
- Correção do DTLS 1.3 para verificação de tamanho para incluir cabeçalhos e correções de CID (PR 7912,7951)
- Corrigir STM32 Hash FIFO e adicionar suporte para STM32U5A9xx (PR 7787)
- Corrigir erro de compilação do CMake para compilações curl (PR 8021)
- SP Maths: correção do PowerPC ASM para usar XOR em vez de LI (PR 8038)
- Carregamento SSL de chaves/certificados: testes e correções (PR 7789)
- Diversos. correções para Dilithium e Kyber (PR 7721.7765.7803.8027.7904)
- Correções para construção de fontes wolfBoot para PQ LMS/XMSS (PR 7868)
- Correções para construção com Kyber habilitado usando CMake e porta zephyr (PR 7773)
- Correção para casos extremos com retomada de sessão com TLS 1.2 (PR 8097)
- Corrigido problema com ARM ASM com AES CFB/OFB não inicializando o membro "esquerdo" (PR 8099)
Para obter informações adicionais sobre vulnerabilidade, visite a página de vulnerabilidade em: https://www.wolfssl.com/docs/security-vulnerabilities/
Consulte o arquivo INSTALL para obter instruções de construção. Mais informações podem ser encontradas on-line em: https://wolfssl.com/wolfSSL/Docs.html
Recursos
Site wolfSSL
wolfSSL Wiki
Perguntas frequentes sobre FIPS 140-2/140-3
Documentação wolfSSL
Manual wolfSSL
Referência da API wolfSSL
Referência da API wolfCrypt
TLS 1.3
Vulnerabilidades do wolfSSL
Exemplos adicionais de wolfSSL
Estrutura de diretório
├── 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]