Dasturlash

WolfSSL va TLS 1.3 muammolari: Haproxy‑da “middlebox compatibility”ni yoqish sirri

1-mart, 2026, 08:1112 ko'rish3 daqiqa o'qish
WolfSSL va TLS 1.3 muammolari: Haproxy‑da “middlebox compatibility”ni yoqish sirri

OpenSSL‑ning ba’zi cheklovlari sababli ishlab chiquvchilar ko‘pincha WolfSSLni o‘rniga qo‘llashni o‘ylashadi. Ammo WolfSSL‑ni Haproxy serveriga integratsiya qilganda, ayniqsa TLS 1.3 protokoli bilan ishlashda, kutilmagan xatoliklar paydo bo‘lishi mumkin. Ushbu maqolada biz muammoni qadam‑baqadam tahlil qilamiz, “middlebox compatibility” (o‘rta quti moslashuvi) nima ekanligini tushuntiramiz va muammoni qanday hal qilish mumkinligini ko‘rib chiqamiz.

TLS 1.3 va middlebox compatibility nima?

TLS 1.3 – bu xavfsiz aloqani ta’minlovchi yangi standart bo‘lib, avvalgi TLS 1.2 ga qaraganda ancha tez va xavfsiz. Ammo tarmoqda joylashgan ba’zi “middlebox” (yoki o‘rta quti) qurilmalari – masalan, firewall, proxy, NAT – hali TLS 1.2 ni qo‘llab‑quvvatlaydi. Shuning uchun TLS 1.3 “middlebox compatibility mode” deb ataluvchi qo‘shimcha rejimni taklif qiladi. Bu rejimda mijoz (client) ClientHello xabariga bo‘sh bo‘lmagan session_id qo‘shadi va server esa ChangeCipherSpec yozuvini yuboradi. Bu eski qurilmalar uchun “TLS 1.2 kabi” ko‘rinadi, lekin qo‘shimcha kechikish keltirib chiqaradi.

WolfSSL‑da muammo qayerda?

WolfSSL‑ning standart qurilmasida WOLFSSL_TLS13_MIDDLEBOX_COMPAT bayrog‘i yoqilmagan. Natijada, TLS 1.3 mijozlari session_id yuborishi mumkin, lekin server ChangeCipherSpec javobini qaytarmaydi. Bu esa Erlang/OTP yoki Elixir asosidagi HTTP mijozlari middlebox server message xatosini ko‘rsatadi:

  • "Failed to assert middlebox server message"
  • "Unexpected Message – encrypted_extensions"

Natijada TLS 1.3 aloqasi uzilib, mijoz middlebox_comp_mode: false bo‘lsa ham ishlaydi, lekin bu xavfsizlik nuqtai nazaridan tavsiya etilmaydi.

Muammoni qanday hal qilish mumkin?

Quyidagi amallarni bajarish orqali muammoni bartaraf etish mumkin:

  • WolfSSLni qayta kompilyatsiya qilish: WOLFSSL_TLS13_MIDDLEBOX_COMPAT bayrog‘ini yoqing. Bu bayroq TLS 1.3 handshake paytida kerakli ChangeCipherSpec xabarini yuboradi.
  • Haproxy konfiguratsiyasini tekshirish: ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 kabi parametrlarni qo‘shish, lekin no-tls13ni olib tashlang.
  • Erlang/Elixir kodida middlebox rejimini yoqish: middlebox_comp_mode: true parametrini qo‘shish. Agar serverda bu rejim yoqilmagan bo‘lsa, xatolik qaytadi.
  • Alternativ TLS kutubxonalarini ko‘rib chiqish: LibreSSL yoki BoringSSL kabi kutubxonalar RFC 8446 ga to‘liq mos keladi, lekin ular ham o‘ziga xos cheklovlarga ega.

Amaliy misol – Elixir’da HTTP so‘rovi

Quyidagi kod parchasida TLS 1.3 va middlebox compatibility rejimi yoqilgan holda Haproxy+WolfSSL serveriga qanday murojaat qilish ko‘rsatilgan:

#!/usr/bin/env elixir
url = "https://example-wolfssl.com"
{:ok, _} = Application.ensure_all_started(:inets)
{:ok, _} = Application.ensure_all_started(:ssl)
http_options = [
  ssl: [
    verify: :verify_peer,
    cacerts: :public_key.cacerts_get(),
    versions: [:"tlsv1.2", :"tlsv1.3"],
    middlebox_comp_mode: true
  ]
]
{:ok, {{_, 200, _}, _headers, body}} = :httpc.request(:get, {String.to_charlist(url), []}, http_options, [])
IO.puts("Response body: #{body}")

Agar WolfSSL WOLFSSL_TLS13_MIDDLEBOX_COMPAT bilan kompilyatsiya qilingan bo‘lsa, yuqoridagi kod muvaffaqiyatli ishlaydi. Aks holda, middlebox_comp_mode: false ga o‘zgartirish orqali muammoni chetlab o‘tish mumkin, lekin bu tavsiya etilmaydi.

Xulosa

WolfSSL TLS 1.3’da middlebox compatibility rejimini qo‘llab‑quvvatlamasligi, ayniqsa Haproxy va Erlang/Elixir muhitida muammolar keltirib chiqaradi. Bu muammoni hal qilish uchun kutubxonani to‘g‘ri bayroqlar bilan kompilyatsiya qilish, server‑mijoz konfiguratsiyalarini sinchiklab tekshirish va kerak bo‘lganda alternativ TLS kutubxonalariga murojaat qilish zarur. Xavfsizlikni birinchi o‘ringa qo‘ysak, middlebox compatibility rejimini yoqish tavsiya etiladi.

Manba: Hacker News
#WolfSSL #TLS 1.3 #Haproxy #Erlang #Middlebox Compatibility
Telegram da muhokama qilish