Pustaka SSL/TLS Tertanam wolfSSL
Pustaka SSL tertanam wolfSSL (sebelumnya CyaSSL) adalah pustaka SSL/TLS ringan yang ditulis dalam ANSI C dan ditargetkan untuk lingkungan tertanam, RTOS, dan sumber daya terbatas - terutama karena ukurannya yang kecil, kecepatan, dan rangkaian fiturnya. Ini umumnya digunakan dalam lingkungan operasi standar juga karena harganya yang bebas royalti dan dukungan lintas platform yang sangat baik. wolfSSL mendukung standar industri hingga TLS 1.3 dan DTLS 1.3 saat ini, hingga 20 kali lebih kecil dari OpenSSL, dan menawarkan cipher progresif seperti grup ChaCha20, Curve25519, Blake2b, dan Post-Quantum TLS 1.3. Pembandingan dan umpan balik pengguna melaporkan kinerja yang jauh lebih baik saat menggunakan wolfSSL dibandingkan OpenSSL.
wolfSSL didukung oleh perpustakaan kriptografi wolfCrypt. Dua versi wolfCrypt telah divalidasi FIPS 140-2 (Sertifikat #2425 dan sertifikat #3389). Validasi FIPS 140-3 sedang berlangsung. Untuk informasi tambahan, kunjungi FAQ FIPS wolfCrypt atau hubungi [email protected].
Mengapa Memilih wolfSSL?
Ada banyak alasan untuk memilih wolfSSL sebagai solusi SSL/TLS tertanam, desktop, seluler, atau perusahaan. Beberapa alasan utama mencakup ukuran (ukuran tapak tipikal berkisar antara 20-100 kB), dukungan untuk standar terbaru (SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3, DTLS 1.0, DTLS 1.2, dan DTLS 1.3) , dukungan cipher terkini dan progresif (termasuk stream cipher), multi-platform, bebas royalti, dan API kompatibilitas OpenSSL untuk memudahkan porting ke aplikasi yang sudah ada yang sebelumnya telah menggunakan paket OpenSSL. Untuk daftar fitur lengkap, lihat Bab 4 dari manual wolfSSL.
Catatan, Silakan Baca
Catatan 1
wolfSSL mulai 3.6.6 tidak lagi mengaktifkan SSLv3 secara default. wolfSSL juga tidak lagi mendukung rangkaian sandi kunci statis dengan PSK, RSA, atau ECDH. Artinya, jika Anda berencana menggunakan cipher suite TLS, Anda harus mengaktifkan DH (DH aktif secara default), atau mengaktifkan ECC (ECC aktif secara default), atau Anda harus mengaktifkan rangkaian cipher kunci statis dengan satu atau lebih definisi berikut:
WOLFSSL_STATIC_DH
WOLFSSL_STATIC_RSA
WOLFSSL_STATIC_PSK
Meskipun rangkaian sandi kunci statis tidak digunakan lagi dan akan dihapus dari versi TLS mendatang. Mereka juga menurunkan keamanan Anda dengan menghapus PFS.
Saat mengkompilasi ssl.c
, wolfSSL sekarang akan mengeluarkan kesalahan kompiler jika tidak ada cipher suite yang tersedia. Anda dapat menghilangkan kesalahan ini dengan mendefinisikan WOLFSSL_ALLOW_NO_SUITES
jika Anda menginginkannya, yaitu, Anda tidak menggunakan cipher suite TLS.
Catatan 2
wolfSSL mengambil pendekatan yang berbeda terhadap verifikasi sertifikat dibandingkan OpenSSL. Kebijakan default untuk klien adalah memverifikasi server, ini berarti jika Anda tidak memuat CA untuk memverifikasi server, Anda akan mendapatkan kesalahan koneksi, tidak ada kesalahan penandatangan untuk mengonfirmasi kegagalan (-188).
Jika Anda ingin meniru perilaku OpenSSL agar SSL_connect
berhasil meskipun verifikasi server gagal dan mengurangi keamanan, Anda dapat melakukannya dengan menelepon:
wolfSSL_CTX_set_verify ( ctx , WOLFSSL_VERIFY_NONE , NULL );
sebelum memanggil wolfSSL_new();
. Padahal itu tidak disarankan.
Catatan 3
Nilai enum SHA, SHA256, SHA384, SHA512 tidak lagi tersedia ketika wolfSSL dibuat dengan --enable-opensslextra
( OPENSSL_EXTRA
) atau dengan makro NO_OLD_SHA_NAMES
. Nama-nama ini dipetakan ke OpenSSL API untuk fungsi hash panggilan tunggal. Sebaliknya nama WC_SHA
, WC_SHA256
, WC_SHA384
dan WC_SHA512
harus digunakan untuk nama enum.
wolfSSL Rilis 5.7.4 (24 Oktober 2024)
Rilis 5.7.4 telah dikembangkan sesuai dengan pengembangan wolfSSL dan proses QA (lihat tautan di bawah) dan berhasil melewati kriteria kualitas. https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
CATATAN: * --enable-heapmath tidak digunakan lagi dan akan dihapus pada akhir tahun 2024
PR adalah singkatan dari Pull Request, dan PR merujuk pada nomor permintaan pull GitHub tempat perubahan kode ditambahkan.
Kerentanan
- [Rendah] Saat lapisan kompatibilitas OpenSSL diaktifkan, verifikasi sertifikat berperilaku berbeda di wolfSSL dibandingkan OpenSSL, dalam implementasi X509_STORE_add_cert() dan X509_STORE_load_locations(). Sebelumnya, jika aplikasi secara eksplisit memuat sertifikat perantara, wolfSSL hanya memverifikasi hingga sertifikat perantara tersebut, bukan memverifikasi hingga root CA. Ini hanya memengaruhi kasus penggunaan saat API dipanggil secara langsung, dan tidak memengaruhi koneksi TLS. Pengguna yang memanggil API X509_STORE_add_cert() atau X509_STORE_load_locations() secara langsung di aplikasi mereka disarankan untuk memperbarui versi wolfSSL yang digunakan atau melakukan pemeriksaan kewarasan tambahan pada sertifikat yang dimuat ke X509_STORE saat memverifikasi sertifikat. (#8087)
Perbaikan Pembuatan Eksperimental TLS PQC
- Saat menggunakan TLS dengan algoritme pasca kuantum diaktifkan, koneksi menggunakan kurva EC yang lebih kecil dari yang disepakati. Pengguna yang membangun dengan --enable-experimental dan mengaktifkan cipher suite PQC dengan koneksi TLS disarankan untuk memperbarui versi wolfSSL yang digunakan. Terima kasih kepada Daniel Correa atas laporannya. (#8084)
Penambahan Fitur Baru
- RISC-V 64 optimasi perakitan baru ditambahkan untuk SHA-256, SHA-512, ChaCha20, Poly1305, dan SHA-3 (PR 7758,7833,7818,7873,7916)
- Menerapkan dukungan untuk Connection ID (CID) dengan DTLS 1.2 (PR 7995)
- Tambahkan dukungan untuk libnds (DevkitPro) (PR 7990)
- Tambahkan port untuk Mosquitto OSP (Proyek Sumber Terbuka) (PR 6460)
- Tambahkan port untuk init sssd (PR 7781)
- Tambahkan port untuk eXosip2 (PR 7648)
- Tambahkan dukungan untuk STM32G4 (PR 7997)
- Tambahkan dukungan untuk Dukungan Panggilan Balik Kripto MAX32665 dan MAX32666 TPU HW dan ARM ASM (PR 7777)
- Tambahkan dukungan untuk membangun wolfSSL untuk digunakan di libspdm (PR 7869)
- Tambahkan port untuk digunakan dengan Nucleus Plus 2.3 (PR 7732)
- Dukungan awal untuk sertifikat atribut RFC5755 x509 (acerts). Diaktifkan dengan --enable-acert (PR 7926)
- Pembongkaran Padding RSA PKCS#11 memungkinkan token melakukan CKM_RSA_PKCS (tanda tangan/enkripsi), CKM_RSA_PKCS_PSS (tanda tangan), dan CKM_RSA_PKCS_OAEP (enkripsi). (PR 7750)
- Menambahkan fungsi gaya “baru” dan “hapus” untuk alokasi heap/pool dan membebaskan struktur kripto tingkat rendah (PR 3166 dan 8089)
Peningkatan dan Optimasi
- Tingkatkan alt maks default. nama dari 128 hingga 1024 (PR 7762)
- Menambahkan fungsi persetujuan DH waktu konstan baru wc_DhAgree_ct (PR 7802)
- Lapisan kompatibilitas yang diperluas dengan API EVP_PKEY_is_a (PR 7804)
- Tambahkan opsi untuk menonaktifkan pengujian perangkat lunak pengujian cryptocb menggunakan --disable-cryptocb-sw-test (PR 7862)
- Tambahkan panggilan ke panggilan balik verifikasi sertifikat sebelum memeriksa tanggal sertifikat (PR 7895)
- Algoritme yang diperluas didukung dengan pembungkus wolfCrypt CSharp. Menambahkan dukungan untuk RNG, ECC(ECIES dan ECDHE), RSA, ED25519/Curve25519, AES-GCM, dan Hashing (PR 3166)
- Perluas dukungan MMCAU untuk digunakan dengan DES ECB (PR 7960)
- Perbarui AES SIV untuk menangani beberapa input data terkait (PR 7911)
- Hapus HAVE_NULL_CIPHER dari --enable-openssh (PR 7811)
- Menghapus pemeriksaan duplikat if(NULL) saat memanggil XFREE (makro melakukannya) (PR 7839)
- Setel default RSA_MIN_SIZE ke 2048 bit (PR 7923)
- Menambahkan dukungan untuk wolfSSL untuk digunakan sebagai TLS default di kernel zephyr (PR 7731)
- Tambahkan build penyedia aktif menggunakan --enable-wolfprovider dengan autotools (PR 7550)
- Dukungan Renesas RX TSIP ECDSA (PR 7685)
- Mendukung downgrade DTLS1.3 ketika server mendukung CID (PR 7841)
- Sisi server memeriksa OCSP meskipun menggunakan v2 multi (PR 7828)
- Tambahkan penanganan parameter hash yang tidak ada dalam penguraian dan pembuatan bundel PKCS7 (PR 7845)
- Tambahkan penggunaan w64wrapper untuk Poly1305, memungkinkan Poly1305 digunakan di lingkungan yang tidak memiliki tipe word64 (PR 7759)
- Pembaruan pada dukungan maxq10xx (PR 7824)
- Tambahkan dukungan untuk penguraian atribut PKCS8 opsional (PR 7944)
- Tambahkan dukungan untuk kedua metode sisi dengan DTLS 1.3 (PR 8012)
- Menambahkan dukungan PEM PKCS7 untuk mengurai data PEM dengan BEGIN/END PKCS7 (PR 7704)
- Tambahkan dukungan CMake untuk WOLFSSL_CUSTOM_CURVES (PR 7962)
- Tambahkan dukungan pencocokan wildcard paling kiri ke X509_check_host() (PR 7966)
- Tambahkan opsi untuk mengatur SKID khusus dengan pembuatan bundel PKCS7 (PR 7954)
- Membangun wolfSSL sebagai perpustakaan dengan Ada dan koreksi manifes Alire (PR 7303,7940)
- Dukungan Renesas RX72N diperbarui (PR 7849)
- Opsi baru WOLFSSL_COPY_KEY ditambahkan untuk selalu menyalin kunci ke objek SSL (PR 8005)
- Tambahkan opsi baru WOLFSSL_COPY_CERT untuk selalu menyalin buffer sertifikat untuk setiap objek SSL (PR 7867)
- Tambahkan opsi untuk menggunakan AES-CBC dengan HMAC untuk tiket sesi default enc/des. Defaultnya adalah AES-128-CBC dengan HMAC-SHA256 (PR 7703)
- Peningkatan penggunaan memori pada objek wc_PRF, sha256 (untuk kode kecil ketika banyak register tersedia) dan objek sp_int (PR 7901)
- Ubah skrip konfigurasi untuk mengatasi ">>" tanpa perintah. Di /bin/sh yang lebih lama, ini bisa menjadi ambigu, seperti yang digunakan di OS seperti FreeBSD 9.2 (PR 7876)
- Jangan mencoba memasukkan header sistem bila tidak diperlukan (PR 7813)
- Sertifikat: Pengkodean DER parameter algoritma tanda tangan ECC sekarang diperbolehkan menjadi NULL dengan definisi (PR 7903)
- SP x86_64 asm: periksa dukungan AVX2 untuk VM (PR 7979)
- Perbarui dukungan rx64n di gr-rose (PR 7889)
- Perbarui versi FSP ke v5.4.0 untuk RA6M4 (PR 7994)
- Perbarui versi driver TSIP ke v1.21 untuk RX65N RSK (PR 7993)
- Tambahkan panggilan balik kripto baru untuk RSA dengan padding (PR 7907)
- Mengganti penggunaan pqm4 dengan implementasi wolfSSL dari Kyber/MLDSA (PR 7924)
- Dukungan pagar memori yang dimodernisasi untuk C11 dan dentang (PR 7938)
- Tambahkan kesalahan CRL override callback (PR 7986)
- Perluas panggilan balik ekstensi X509 yang tidak diketahui untuk digunakan dengan konteks pengguna (PR 7730)
- Pelacakan kesalahan debug tambahan ditambahkan dengan TLS (PR 7917)
- Menambahkan dukungan runtime untuk pelacakan tumpukan panggilan perpustakaan dengan –enable-debug-trace-errcodes=backtrace, menggunakan libbacktrace (PR 7846)
- Kesesuaian C89 yang diperluas (PR 8077)
- Dukungan yang diperluas untuk WOLFSSL_NO_MALLOC (PR 8065)
- Menambahkan dukungan untuk kompilasi silang modul kernel Linux (PR 7746)
- Modul kernel Linux yang diperbarui dengan dukungan untuk kernel 6.11 dan 6.12 (PR 7826)
- Perkenalkan WOLFSSL_ASN_ALLOW_0_SERIAL untuk mengizinkan penguraian sertifikat dengan nomor seri 0 (PR 7893)
- Tambahkan repositori_pemilik kondisional ke semua alur kerja wolfSSL GitHub (PR 7871)
Pembaruan Espressif / Arduino
- Perbarui pengaturan wolfcrypt.h untuk Espressif ESP-IDF, pembaruan templat (PR 7953)
- Perbarui Espressif sha, util, mem, pembantu waktu (PR 7955)
- Perbaikan espresif _thread_local_start dan _thread_local_end (PR 8030)
- Meningkatkan tolok ukur untuk perangkat Espressif (PR 8037)
- Perkenalkan Espressif umum CONFIG_WOLFSSL_EXAMPLE_NAME, Kconfig (PR 7866)
- Tambahkan wolfSSL esp-tls dan Dukungan Bundel Sertifikat untuk Espressif ESP-IDF (PR 7936)
- Perbarui Rilis wolfssl untuk Arduino (PR 7775)
Posting Pembaruan Kripto Quantum
- Dilithium: mendukung array ukuran tetap di dilithium_key (PR 7727)
- Dilithium: tambahkan opsi untuk menggunakan precalc dengan tanda kecil (PR 7744)
- Izinkan Kyber dibangun dengan FIPS (PR 7788)
- Izinkan Kyber asm digunakan dalam modul kernel Linux (PR 7872)
- Dilithium, Kyber: Pembaruan ke spesifikasi akhir (PR 7877)
- Dilithium: Mendukung Draf FIPS 204 dan Draf Akhir (PR 7909,8016)
Optimasi Perakitan ARM
- Optimalisasi perakitan ARM32 ditambahkan untuk ChaCha20 dan Poly1305 (PR 8020)
- Peningkatan pengoptimalan perakitan Poly1305 untuk Aarch64 (PR 7859)
- Optimasi perakitan Poly1305 ditambahkan untuk Thumb-2 (PR 7939)
- Menambahkan opsi build ARM ASM ke STM32CubePack (PR 7747)
- Tambahkan ARM64 ke Proyek Visual Studio (PR 8010)
- Optimalisasi perakitan Kyber untuk ARM32 dan Aarch64 (PR 8040,7998)
- Optimalisasi perakitan Kyber untuk ARMv7E-M/ARMv7-M (PR 7706)
Perbaikan
- Pemuatan kunci ECC: perbaikan untuk sertifikat dengan parameter yang bukan default untuk ukuran (PR 7751)
- Perbaikan untuk membangun x86 di Visual Studio untuk OS non-windows (PR 7884)
- Perbaikan untuk panggilan balik rahasia TLS v1.2, salah mendeteksi rahasia master yang buruk (PR 7812)
- Perbaikan untuk penggunaan perakitan PowerPC dengan Darwin dan SP math all (PR 7931)
- Perbaikan untuk mendeteksi versi Mac OS yang lebih lama ketika mencoba menghubungkan dengan libdispatch (PR 7932)
- Perbaikan untuk penurunan versi DTLS1.3 ke DTLS1.2 ketika server mengirimkan beberapa paket jabat tangan yang digabungkan menjadi satu transmisi. (PR 7840)
- Perbaikan untuk OCSP untuk menyimpan permintaan jika disimpan di ssl->ctx->certOcspRequest (PR 7779)
- Perbaiki ke OCSP untuk mencari CA dengan hash kunci, bukan ext. id kunci (PR 7934)
- Perbaikan untuk memori statis dan build singlethreaded (PR 7737)
- Perbaiki untuk tidak mengizinkan Shake128/256 dengan Xilinx AFALG (PR 7708)
- Perbaikan untuk mendukung PKCS11 tanpa pembuatan kunci RSA (PR 7738)
- Perbaiki tidak memanggil panggilan balik penandatanganan saat menggunakan panggilan balik PK + TLS 1.3 (PR 7761)
- Label perbaikan ASM Cortex-M/Thumb2 untuk kompiler IAR (PR 7753)
- Perbaiki dengan PKCS11 untuk mengulangi dengan benar melalui slotId (PR 7736)
- Berhenti menghapus header urutan pada ekstensi AltSigAlg (PR 7710)
- Perbaiki ParseCRL_AuthKeyIdExt dengan templat ASN untuk menetapkan nilai extAuthKeyIdSet (PR 7742)
- Gunakan panjang kunci maksimal untuk ukuran buffer enkripsi PSK (PR 7707)
- Perbaikan DTLS 1.3 untuk pemeriksaan ukuran guna menyertakan perbaikan header dan CID (PR 7912,7951)
- Perbaiki STM32 Hash FIFO dan tambahkan dukungan untuk STM32U5A9xx (PR 7787)
- Perbaiki kesalahan build CMake untuk build curl (PR 8021)
- SP Maths: Perbaikan PowerPC ASM untuk menggunakan XOR alih-alih LI (PR 8038)
- Pemuatan kunci/sertifikat SSL: pengujian dan perbaikan (PR 7789)
- Lain-lain perbaikan untuk Dilithium dan Kyber (PR 7721,7765,7803,8027,7904)
- Perbaikan untuk membangun sumber wolfBoot untuk PQ LMS/XMSS (PR 7868)
- Perbaikan untuk membangun dengan Kyber diaktifkan menggunakan CMake dan port zephyr (PR 7773)
- Perbaikan untuk kasus edge dengan dimulainya kembali sesi dengan TLS 1.2 (PR 8097)
- Memperbaiki masalah dengan ARM ASM dengan AES CFB/OFB tidak menginisialisasi anggota "kiri" (PR 8099)
Untuk informasi kerentanan tambahan, kunjungi halaman kerentanan di: https://www.wolfssl.com/docs/security-vulnerabilities/
Lihat file INSTALL untuk instruksi pembuatan. Info lebih lanjut dapat ditemukan online di: https://wolfssl.com/wolfSSL/Docs.html
Sumber daya
Situs WolfSSL
serigalaSSL Wiki
Pertanyaan Umum FIPS 140-2/140-3
Dokumentasi wolfSSL
panduan serigalaSSL
Referensi API wolfSSL
Referensi API wolfCrypt
TLS 1.3
Kerentanan wolfSSL
Contoh tambahan wolfSSL
Struktur direktori
├── 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]