mORMot2 DailyЕжедневный обзор коммитов апстрима

SChannel получает нативный mTLS, а гонки запуска серверов устранены

Windows-серверы теперь могут требовать и проверять клиентские сертификаты через SChannel, используя существующие trust stores и callbacks TNetTlsContext. Вторая серия исправляет создание HTTP и async servers: главные потоки не запускаются до готовности sockets, workers и перекрёстных ссылок. Командам с Windows mTLS или созданием серверов под нагрузкой следует брать финальную build.

Коротко

  • Переходите на build 2.4.17294 в de8d47ea7122b30aa81296a1e5e899a3909e34b1.
  • SChannel servers реализуют mTLS через ClientCertificateAuthentication, CACertificatesFile, CASystemStores, CACertificatesRaw, OnEachPeerVerify и OnAfterPeerValidate.
  • Потоки HTTP и async servers остаются suspended до инициализации sockets, workers и owner links.
  • Обновитесь ради исправления CACertificatesRaw, явной ошибки отсутствующего client certificate и финальных правок SChannel declarations/cache.
  • В public API добавлены acoCreateSuspended, ConsoleLock/ConsoleUnLock и WinCryptTextToBinary.

Рекомендации по обновлению

Переходите на build 2.4.17294. Срочно обновитесь, если Windows server использует client-certificate authentication, CACertificatesRaw задаёт trust anchors или HTTP/async servers создаются конкурентно. Проверьте accepted/rejected chains, overrides OnEachPeerVerify, context OnAfterPeerValidate и запуск THttpServer/THttpAsyncServer. В raw payload нет superseded_by, поэтому формальный avoid range не заявляется; берите полные последовательности, не отдельные промежуточные commits.

Сборка2.4.17268 → 2.4.17294
Коммиты26
Строки+1526 -492
Чтение5 мин

26 из 26 записей · 26 коммитов в апстриме

Сюжеты
# Запись Категория Модули
1 Высокий SChannel mTLS получил совместимость с Windows 7 и более строгие chain checks mormot.net.sock.windows использует короткий CERT_CHAIN_ENGINE_CONFIG для Windows 7, отклоняет mTLS на более старых системах, уточняет client-auth EKU/trust и исправляет cleanup chain engine. Исправления mormot.net.sock.windows 9d610a05+36-20

net: several SChannel fixes

Влияние

Windows 7 может использовать новый server mTLS; более старые системы получают явный unsupported result. Chain resources освобождаются корректно.

Arnaud Bouchez · 12:56 UTC · открыть коммит на GitHub →

2 Высокий Финальные исправления SChannel устраняют конфликт типов и блокирующую загрузку chain mormot.net.sock.windows использует собственные указатели certificate context, задаёт SCH_CRED_CACHE_ONLY_URL_RETRIEVAL_ON_CREATE и завершает guards версий Windows, устраняя конфликт PCCERT_CONTEXT в Delphi RTL и сетевую URL retrieval при создании credentials. Исправления mormot.net.sock.windows+1 9a2fec3f+17-12

net: latest SChannel fixes

Влияние

Windows builds Delphi/FPC получают стабильный финальный mTLS path, а startup не блокируется на URL fetching цепочки. Не-Windows TLS backends не затронуты.

Arnaud Bouchez · 19:09 UTC · открыть коммит на GitHub →

3 Высокий Потоки серверов запускаются только после завершения construction TLoggedThread.AfterConstruction вызывает inherited перед Start. THttpServerGeneric и TAsyncConnections всегда создают RTL thread suspended, запоминают опцию и запускают после construction; THttpAsyncServer ставит esRunning только после проверки bound socket. Исправления mormot.core.threads+2 0b8d9252+11-9

net: fixed previous commits

Влияние

HTTP и async servers больше не гонятся с constructors и не сообщают running до успешного bind. Исправление касается Delphi/FPC backends на всех платформах с этими классами.

Публичный API

  • TLoggedThread.AfterConstructionbehaviour-changed

Arnaud Bouchez · 17:34 UTC · открыть коммит на GitHub →

4 Высокий Классические HTTP servers сохраняют полную TLS client-auth policy на соединение THttpServerSocket.Create копирует полный TNetTlsContext в каждое accepted connection при client-certificate authentication, затем сбрасывает transient state. OpenSSL validation очищает LastError и вычисляет результат один раз. Исправления mormot.lib.openssl11+2 7b63898e+14-6

net: some TLS fixes especially on OpenSSL and THttpServer

Влияние

Threaded THttpServer connections сохраняют CA lists и callbacks для mTLS. OpenSSL callbacks больше не наследуют stale error предыдущей проверки.

Публичный API

  • THttpServerSocket.Createbehaviour-changed

Arnaud Bouchez · 11:18 UTC · открыть коммит на GitHub →

5 Высокий SChannel явно сообщает об отсутствии client credentials и trust failures Windows TLS path распознаёт SEC_E_NO_CREDENTIALS при отсутствии client certificate, расширяет SSPI error text и ужесточает chain-policy failures, сохраняя callback override. Исправления mormot.core.os+2 13a977c1+10-5

net: better SSPI/SChannel error handling

Влияние

mTLS rejection становится явным и диагностируемым вместо неоднозначного handshake failure. Затронуты Windows servers Delphi/FPC.

Arnaud Bouchez · 13:30 UTC · открыть коммит на GitHub →

6 Высокий In-memory CA certificates теперь попадают в SChannel validation TSChannelServerContext.Create исправляет привязку else при выборе trust source, чтобы CACertificatesRaw разбирался и добавлялся, когда CA не заданы файлом или system stores. Исправления mormot.net.sock.windows 4355bdd9+5-3

net: fixed SChannel CACertificatesRaw[] support

Влияние

Windows mTLS servers с PEM roots в CACertificatesRaw теперь действительно проверяют по этим roots, а не молча пропускают их.

Публичный API

  • TNetTlsContext.CACertificatesRawbehaviour-changed

Arnaud Bouchez · 13:57 UTC · открыть коммит на GitHub →

7 Высокий Windows SChannel servers могут требовать client certificate TSChannelServerContext реализует server-side mTLS из TNetTlsContext: загружает CA sources, при необходимости создаёт exclusive chain engine, запрашивает client credentials, проверяет client-auth EKU и вызывает OnEachPeerVerify/OnAfterPeerValidate. Новые возможности mormot.net.sock+1 cbc906b6+368-38

net: implement mTLS using SChannel

Влияние

Windows backends могут использовать native SChannel для mutual TLS без OpenSSL. Существующие servers остаются one-way TLS, пока ClientCertificateAuthentication выключен.

Стоит взглянуть

При внедрении SChannel mTLS настройте один CA source и проверьте оба callbacks с вашей certificate policy на 2.4.17294.

Публичный API

  • TNetTlsContext.ClientCertificateAuthenticationbehaviour-changed
  • TNetTlsContext.OnEachPeerVerifybehaviour-changed
  • TNetTlsContext.OnAfterPeerValidatebehaviour-changed

Arnaud Bouchez · 12:25 UTC · открыть коммит на GitHub →

8 Средний Семейства HTTP servers переходят на отложенный запуск главного потока TAsyncConnections и THttpServerGeneric задают TLoggedThread.fStartAfterConstruction из public suspended options, а THttpApiServer удаляет ручной Start, поскольку timing теперь контролирует base class. Исправления mormot.net.async+1 2acff7c1+5-21

net: fixed servers main thread startup

Влияние

Это промежуточная startup-правка, позднее исправленная 0b8d9252. Не cherry-pick без финальных изменений construction.

Arnaud Bouchez · 17:16 UTC · открыть коммит на GitHub →

9 Средний THttpAsyncServer связывает потоки до запуска любого из них THttpAsyncServer.Create создаёт inherited server thread и fAsync suspended, задаёт взаимные ссылки, затем запускает async side и ждёт socket bind. Исправления mormot.net.async fb7baf23+17-6

net: fixed THttpAsyncServer.Create thread startup sequence

Влияние

Устраняется окно constructor, где поток мог обратиться к отсутствующему owner state. Это промежуточный fix, завершённый позднее.

Модули

Arnaud Bouchez · 16:22 UTC · открыть коммит на GitHub →

10 Средний Декларации SChannel предоставляют Windows certificate-chain engines mormot.lib.sspi добавляет Windows certificate-chain structures, callbacks, constants и API imports для restricted chain engines и оценки SSL chain policy клиентских сертификатов. Новые возможности mormot.lib.sspi a1586a7c+154-2

lib: SChannel cert chain API support

Влияние

Низкоуровневый Windows Delphi/FPC code может вызывать chain APIs напрямую, а SChannel mTLS получает нужные declarations. Другие платформы не меняются.

Публичный API

  • Windows certificate-chain API declarationsadded

Модули

Arnaud Bouchez · 06:33 UTC · открыть коммит на GitHub →

11 Средний OpenSSL servers теперь вызывают final peer-validation callback После успешного server handshake TOpenSslNetTls.AfterAccept вызывает TNetTlsContext.OnAfterPeerValidate, передавая TLS context, peer certificate, cipher и verification result. Новые возможности mormot.lib.openssl11 bda449fe+36-8

lib: TOpenSslNetTls.AfterAccept implements OnAfterPeerValidate callback

Влияние

OpenSSL server users получают parity с SChannel. Существующие callbacks теперь могут вызываться на server accepts, где раньше не запускались.

Стоит взглянуть

Проверьте handlers OnAfterPeerValidate на server-side assumptions и протестируйте accepted/rejected peer certificates.

Публичный API

  • TNetTlsContext.OnAfterPeerValidatebehaviour-changed

Arnaud Bouchez · 09:59 UTC · открыть коммит на GitHub →

12 Средний TAsyncConnections может создаваться с suspended main loop В TAsyncConnectionsOptions добавлена public option acoCreateSuspended. TAsyncConnections.Create удерживает main thread suspended до готовности workers и initialization. Новые возможности mormot.net.async 342146c9+12-5

net: fixed TAsyncConnections main thread execution

Влияние

Custom async-server descendants могут управлять initial execution. Существующие option sets сохраняют default, framework использует опцию для безопасного startup.

Публичный API

  • acoCreateSuspendedadded

Модули

Arnaud Bouchez · 16:10 UTC · открыть коммит на GitHub →

13 Средний Агрегирующий Lazarus package теперь включает Windows cryptography packages/lazarus/mormot2.pas добавляет mormot.crypt.win в uses, чтобы агрегирующий FPC package компилировал и регистрировал новую Windows cryptography unit. Компилятор и платформы mormot2+1 de8d47ea+8-7

fpc: fixed mormot2 package source

Влияние

Пользователи Lazarus package больше не теряют symbols mormot.crypt.win. Delphi и FPC проекты с прямым списком units не меняются.

Arnaud · 21:05 UTC · открыть коммит на GitHub →

14 Средний Async HTTP initialization публикует состояние до выполнения mormot.net.async и mormot.net.ws.async переносят accept-only flags, публикацию bound socket, owner links и WebSocket keep-instance setup до выполнения workers и main loop. Внутреннее устройство mormot.net.async+1 47868569+103-89

net: async HTTP server code cleanup

Влияние

Async stack видит согласованное constructor state, уменьшая startup races. Серия завершена 0b8d9252 и не требует migration.

Arnaud Bouchez · 16:41 UTC · открыть коммит на GitHub →

15 Средний TLoggedThread получил внутренний переключатель запуска после construction mormot.core.threads добавляет protected flag fStartAfterConstruction и override AfterConstruction, позволяя наследникам оставаться suspended до завершения object construction. Внутреннее устройство mormot.core.threads b698a9c6+13-4

core: introducing TLoggedThread.fStartAfterConstruction flag

Влияние

Внутренний механизм поддерживает server startup fix. Существующие application threads не меняются, если custom descendant не использует protected flag.

Arnaud Bouchez · 17:13 UTC · открыть коммит на GitHub →

16 Низкий TSynTests сериализует multithread console updates mormot.core.test оборачивает progress, color и error output TSynTests в ConsoleLock/ConsoleUnLock, чтобы параллельные suites не смешивали cursor и color state. Исправления mormot.core.test de6c7467+50-35

core: fixed TSynTests console output

Влияние

Вывод параллельных тестов остаётся читаемым. Application backends не затронуты, кроме прямого использования TSynTests.

Модули

Arnaud Bouchez · 15:04 UTC · открыть коммит на GitHub →

17 Низкий Windows wrapper декодирует PEM и Base64 certificate text mormot.core.os.security добавляет public WinCryptTextToBinary, wrapper RawUtf8-to-RawByteString над CryptStringToBinaryA с default CRYPT_STRING_BASE64HEADER, и упрощает WinCryptBinaryAppendAsText. Новые возможности mormot.core.os.security d344d129+43-8

core: new WinCryptTextToBinary() wrapper function

Влияние

Windows code получает checked helper для PEM/Base64 decoding. Существующие callers совместимы и могут перейти на него.

Публичный API

  • WinCryptTextToBinaryadded

Arnaud Bouchez · 09:46 UTC · открыть коммит на GitHub →

18 Низкий Public console locking поддерживает атомарные output sequences mormot.core.os добавляет ConsoleLock и ConsoleUnLock поверх reentrant ConsoleCriticalSection, позволяя защищать многошаговый console update как одну последовательность. Новые возможности mormot.core.os 3f2d5e44+18-2

core: new ConsoleLock/ConsoleUnLock functions

Влияние

Tools и test runners могут исключить interleaved output между потоками. Существующие console calls не меняются.

Публичный API

  • ConsoleLockadded
  • ConsoleUnLockadded

Модули

Arnaud Bouchez · 15:03 UTC · открыть коммит на GitHub →

19 Низкий Ошибки Windows trust получили читаемые имена mormot.core.os расширяет lookup Windows error codes константами SChannel, SSPI и certificate trust, показывая symbolic names для chain/policy failures. Компилятор и платформы mormot.core.os 31cf2232+13-7

core: include SChannel/SSPI trust error codes

Влияние

Logs и exceptions легче диагностировать. Trust decisions и application APIs не меняются.

Модули

Arnaud Bouchez · 12:01 UTC · открыть коммит на GitHub →

20 Низкий TLS callback и Windows decoding helpers консолидированы mormot.lib.openssl11 переносит сборку final peer callback в local helper, а mormot.lib.sspi использует общий WinCryptTextToBinary вместо private CryptStringToBinaryA path. Внутреннее устройство mormot.lib.openssl11+1 c9977bb6+32-33

lib: small refactoring of the two previous commits

Влияние

TLS verification behavior не меняется, duplicated conversion/callback code удалён. Migration не нужна.

Arnaud Bouchez · 10:07 UTC · открыть коммит на GitHub →

21 Низкий JSON length guard переписан без изменения результата TJsonWriter.AddEscapeBuffer заменяет short-circuit condition вложенными проверками MaxLen и Len; итоговый predicate остаётся тем же. Внутреннее устройство mormot.core.json 5b7993fc+5-5

core: fixed #626 TJsonWriter.AddEscapeBuffer

Влияние

Наблюдаемое application behavior и public API не меняются; это переписывание guard, исправленного в предыдущем выпуске.

Модули

Arnaud Bouchez · 10:14 UTC · PR #626 · открыть коммит на GitHub →

22 Низкий Network suite получил end-to-end тест SChannel mTLS server test.net.proto создаёт Windows SChannel servers с client-certificate authentication и проверяет успешные/ошибочные handshakes с тестовыми identities. Тесты test.net.proto 1a36278a+332-6

test: cover SChannel mTLS server

Влияние

Это regression coverage новой функции без самостоятельного изменения application behavior.

Модули

Arnaud Bouchez · 13:10 UTC · открыть коммит на GitHub →

23 Низкий Тестовые SChannel servers теперь работают параллельно Network test suite запускает несколько вариантов SChannel server параллельно, проверяя concurrent console output и независимые TLS lifetimes. Тесты test.net.proto 2f892a9e+141-118

test: made SChannel servers run in parallel

Влияние

Меняется только test harness; production backends не получают behavioral или API changes.

Модули

Arnaud Bouchez · 15:06 UTC · открыть коммит на GitHub →

24 Низкий Интеграционные тесты SChannel покрывают полную матрицу client auth TNetworkProtocols._SChannel расширяет финальную Windows TLS matrix по server implementations, источникам CA и результатам client certificates. Тесты test.net.proto eddc9ae5+35-33

test: completed TNetworkProtocols._SChannel

Влияние

Regression coverage растёт; application code и runtime Delphi/FPC не меняются.

Модули

Arnaud Bouchez · 16:09 UTC · открыть коммит на GitHub →

25 Низкий Тесты OpenSSL server покрывают больше TLS validation paths test.net.proto расширяет покрытие OpenSSL TLS server вместе с общим peer-validation callback и SChannel client-certificate cases. Тесты test.net.proto 09e6e909+29-7

test: enhanced OpenSSL TLS server coverage

Влияние

Это test-only coverage для parity checks OpenSSL/SChannel без изменений public API.

Модули

Arnaud Bouchez · 15:18 UTC · открыть коммит на GitHub →

26 Низкий Тесты SChannel добавляют edge cases trust и callbacks test.net.proto расширяет SChannel coverage для CA sources, peer callbacks и client-certificate outcomes во время завершения implementation. Тесты test.net.proto 170f4c56+19-3

tests: better SChannel coverage

Влияние

Изменение улучшает только regression detection; application code и public API не меняются.

Модули

Arnaud Bouchez · 13:37 UTC · открыть коммит на GitHub →

Активность апстрима коммитов в день · последние 60 дней
Коммиты977
Активных дней44/60
Пик активности2026-09-30
Максимум60
2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 26 commits2026-08-28: 11 commits2026-08-29: 10 commits2026-08-30: 1 commit2026-08-31: 23 commits2026-09-01: 0 commits2026-09-02: 20 commits2026-09-03: 29 commits2026-09-04: 35 commits2026-09-05: 13 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 23 commits2026-09-09: 10 commits2026-09-10: 17 commits2026-09-11: 23 commits2026-09-12: 14 commits2026-09-13: 9 commits2026-09-14: 7 commits2026-09-15: 4 commits2026-09-16: 24 commits2026-09-17: 26 commits2026-09-18: 21 commits2026-09-19: 59 commits2026-09-20: 13 commits2026-09-21: 5 commits2026-09-22: 34 commits2026-09-23: 17 commits2026-09-24: 57 commits2026-09-25: 22 commits2026-09-26: 26 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 19 commits2026-09-30: 60 commits2026-10-01: 26 commits2026-10-02: 30 commits2026-10-03: 32 commits2026-10-04: 15 commits2026-10-05: 1 commit2026-10-06: 26 commits2026-10-07: 37 commits2026-10-08: 27 commits2026-10-09: 35 commits2026-10-10: 33 commits2026-10-11: 9 commits2026-10-12: 11 commits2026-10-13: 35 commits
2026-08-152026-10-13