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

SChannel включает TLS 1.3, а поддержка Windows CNG складывается в целое

Эта Windows-серия меняет протокольную политику SChannel по умолчанию, разделяет server credentials между принятыми HTTPS-соединениями и добавляет крупную поддержку CNG, certificate store и msLAPS. Финальные commits также чинят Delphi 7/13, обходят CNG-заглушки Wine и исправляют ownership закрытых ключей.

Коротко

  • Переходите на build 2.4.17208 в 18e7d88c0083b279402c59019c030abdfe39e3e1.
  • SChannelEnableTls13 теперь по умолчанию true на Windows 11 и Windows Server 2022 или новее; задайте false до инициализации, если такое включение не планировалось.
  • HTTPS-серверы на SChannel получают один общий server credential и держат его до освобождения последнего принятого TLS context.
  • TNetTlsContext передаёт SChannel PCCERT_CONTEXT или защищённый паролем PFX, а ReleaseBuffers освобождает неактивные SChannel buffers.
  • Новые TNCrypt, TWinCertStore и TWinCertCngKey открывают CNG keys, certificate stores, signing, unprotect secrets и расшифровку msLAPS.
  • Wine обходит свои CNG-заглушки, а Delphi 7 и Delphi 13 получают явные исправления компиляции.

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

Пользователям Windows SChannel следует взять выпуск целиком до build 2.4.17208 и проверить TLS 1.3, certificate/PFX loading и concurrent shutdown. Задавайте SChannelEnableTls13=false до TLS только если новый default неприемлем. Delphi 7, Delphi 13 и Wine должны включать финальные compatibility fixes.

Сборка2.4.17189 → 2.4.17208
Коммиты19
Строки+1176 -372
Чтение3 мин

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

Сюжеты
# Запись Категория Модули
1 Высокий TLS 1.3 становится default для SChannel на актуальной Windows Public global SChannelEnableTls13 меняет default с false на true; применяется только на Windows 11/Server 2022+ и остаётся opt-out. Несовместимые изменения mormot.net.sock f479106f+6-5

net: now SChannelEnableTls13 default is true

Влияние

Подходящие SChannel clients/servers могут начать согласовывать TLS 1.3 без изменения кода, то есть protocol behavior меняется после rebuild.

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

Проверьте handshakes, cipher policy и peers; задайте SChannelEnableTls13 := false до TLS initialization, если rollout откладывается.

Публичный API

  • SChannelEnableTls13behaviour-changed — Default теперь true на поддерживаемых версиях Windows.

Модули

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

2 Высокий Layouts certificate records исправлены после расширения Crypt32 Типы Crypt32 перенесены в mormot.core.os.security; pointer, blob и record declarations исправлены для компиляции mormot.lib.sspi. Исправления mormot.core.os.security+1 d73d5445+14-8

lib: fixed mormot.lib.sspi compilation

Влияние

Исправлен непосредственно предыдущий Windows binding change; Delphi/FPC не следует брать раннюю промежуточную revision отдельно.

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

3 Высокий Ownership ключей сертификата SChannel исправлен на PRISM TSChannelNetTls.AfterBind убирает CRYPT_ACQUIRE_CACHE_FLAG, инициализирует ownership outputs для каждого certificate и освобождает CAPI/CNG handles, принадлежащие caller. Исправления mormot.core.os.security+1 86828b99+12-3

net: fixed TSChannelNetTls.AfterBind on PRISM

Влияние

SChannel server setup избегает stale output state и утечек private-key handles, включая PRISM; source migration не нужна.

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

4 Высокий Logging serialization и SChannel accept снова компилируются после новых flags Serialization TWindowsSpecs расширена с byte до word после wsWeakCng; SChannel accept сохраняет shared context в local TObject перед cast. Исправления mormot.core.log+1 37405644+9-6

core: fixed compilation after previous commits

Влияние

Закрыты compilation issues от Windows-spec и shared-context changes; application source менять не нужно.

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

5 Высокий SChannel принимает certificate contexts и защищённые паролем PFX SChannel backend реализует TNetTlsContext.CertificateRaw, PrivatePassword и OnPrivatePassword для server certificates, ReleaseBuffers, проверяет private keys и явно отклоняет unsupported ClientCertificateAuthentication. Новые возможности mormot.lib.sspi+2 3f0914a0+76-31

net: enhanced SChannel TLS layer

Влияние

Windows servers могут передать PCCERT_CONTEXT или protected PFX без OpenSSL; запрос SChannel client-certificate authentication теперь явно завершается ошибкой.

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

Проверьте certificate import, password callbacks и buffer release; не включайте ClientCertificateAuthentication на SChannel.

Публичный API

  • TNetTlsContext.CertificateRawbehaviour-changed — SChannel server теперь принимает PCCERT_CONTEXT.
  • TNetTlsContext.PrivatePasswordbehaviour-changed — Используется как пароль импорта PFX SChannel.
  • TNetTlsContext.OnPrivatePasswordbehaviour-changed — Может переопределить пароль PFX SChannel.
  • INetTls.ReleaseBuffersbehaviour-changed — SChannel теперь освобождает idle read/write buffers.

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

6 Высокий Wrapper certificate-to-CNG-key централизует ownership checks TWinCertCngKey получает private key сертификата, требует CNG handle, опционально сравнивает public key и освобождает по ownership CryptAcquireCertificatePrivateKey; constants перенесены в core security. Новые возможности mormot.core.os+3 73dc5e6a+87-20

lib: new TWinCertCngKey wrapper

Влияние

SChannel и другие Windows backends получают checked lifetime boundary для certificate-backed CNG keys, уменьшая leaks и ошибочное использование CAPI handles.

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

Используйте Init/Done парой и CompareKey, если mismatch certificate/key недопустим.

Публичный API

  • TWinCertCngKeyadded — Short-lived checked wrapper для CNG private key сертификата.

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

7 Высокий SChannel HTTPS servers разделяют один credential между соединениями TSChannelNetTls.AfterBind создаёт reference-counted TSChannelServerContext с server CredHandle; accepted connections разделяют его и освобождают после своих security contexts. Производительность mormot.net.sock.windows 73798d46+193-140

net: shared credentials for the HTTPS server using SChannel

Влияние

Нагруженные Windows HTTPS servers избегают AcquireCredentialsHandleW на каждое соединение и получают явный lifetime ordering; wire protocol и API не меняются.

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

8 Высокий Объявление TLS factory снова совместимо с Delphi 7 mormot.net.sock добавляет public function type TNewNetTls для NewNetTls и переносит char constant в module scope для Delphi 7. Компилятор и платформы mormot.net.sock a51ffadf+11-7

net: fixed Delphi 7 compilation

Влияние

Delphi 7 снова компилируется после TLS changes; остальные compilers получают named type для factory variable.

Публичный API

  • TNewNetTlsadded — Public function type для NewNetTls.

Модули

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

9 Высокий Финальный SChannel certificate path компилируется на Delphi 13 mormot.net.sock.windows убирает явный PCCERT_CONTEXT cast для Context.CertificateRaw при вызове CertDuplicateCertificateContext, соответствуя Delphi 13 type checking. Компилятор и платформы mormot.net.sock.windows 18e7d88c+3-4

net: fixed Dlephi 13 compilation

Влияние

Delphi 13 projects с новым SChannel CertificateRaw компилируются на final head; runtime behavior не меняется.

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

10 Средний Certificate metadata и детали CNG signing усилены TWinCertInfo хранит provider type, flags и key spec; добавлены certificate enumeration bindings, имя NTE_BAD_PUBLIC_KEY и nil initialization PKCS#1 pointer для ECDSA. Исправления mormot.core.os+2 6e9ef943+44-15

core: enhanced Windows SSPI/CNG API wrappers

Влияние

Certificate consumers получают данные для выбора CAPI/CNG, а ECDSA signing больше не передаёт uninitialized padding metadata.

Публичный API

  • TWinCertInfo.KeyProviderTypeadded — Открывает тип key provider.
  • TWinCertInfo.KeyProviderFlagsadded — Открывает provider acquisition flags.
  • TWinCertInfo.KeySpecadded — Открывает спецификацию ключа сертификата.

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

11 Средний CNG wrapper получает полный набор property, signing и decrypt helpers TNCrypt добавляет typed handles, hash/sign modes, raw OpenKey/GetProperty/SignHash/Decrypt и high-level GetCardinal, GetBuffer, KeyBits, KeyUsage, KeySign. Новые возможности mormot.lib.sspi 6a4f0636+250-24

lib: completed CNG API wrapper

Влияние

Windows backends могут работать с CNG private keys, включая RSA PKCS#1/PSS и ECDSA signing, через checked wrappers с ENCrypt.

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

Явно выбирайте TNcryptSignMode, проверяйте key usage и signatures независимым verifier.

Публичный API

  • TNcryptHashAlgoadded — Public hash selector для CNG signing.
  • TNcryptSignModeadded — Public selector режима RSA/ECDSA.
  • TNCrypt.KeySignadded — Проверенный high-level helper для CNG signing.

Модули

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

12 Средний Windows certificate stores получают owning iterator и PEM export mormot.core.os.security добавляет TWinCertStore, TWinCertStoreLocation, Create/Next/Duplicate/ToPem и WinCryptBinaryAppendAsText; существующий PEM collection переведён на wrapper. Новые возможности mormot.core.os.security+1 4211be31+155-48

core: new TWinCertStore wrapper and associated raw API

Влияние

Windows backends могут безопасно перечислять stores, дублировать долгоживущие contexts и экспортировать PEM; object владеет store и current context.

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

Вызывайте Duplicate перед сохранением Context за пределами следующего Next и освобождайте TWinCertStore.

Публичный API

  • TWinCertStoreLocationadded — Public selector расположения certificate store.
  • TWinCertStoreadded — Owning iterator Windows certificate store.
  • WinCryptBinaryAppendAsTextadded — Добавляет Windows binary как PEM/base64 text.

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

13 Средний В public API появляется late-bound слой Windows CNG key storage mormot.lib.sspi добавляет ENCrypt, TNCrypt и factory NCrypt с динамической загрузкой provider, key creation, property, finalize, delete и free. Новые возможности mormot.core.os+1 373f69f3+133-3

lib: introducing Windows Cryptography API: Next Generation (CNG) API

Влияние

Windows backends могут использовать CNG без статической зависимости ncrypt.dll; XP не поддерживается, нужно учитывать runtime availability.

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

Проверяйте доступность NCrypt и cleanup provider/key на каждой поддерживаемой Windows.

Публичный API

  • ENCryptadded — Public exception для ошибок NCrypt/CNG.
  • TNCryptadded — Late-bound wrapper CNG key storage.
  • NCryptadded — Глобальная factory для CNG wrapper.

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

14 Средний NCrypt умеет unprotect secrets и декодировать encrypted msLAPS values TNCrypt получает Unprotect и LapsDecrypt поверх optional Windows 8+ APIs; LapsDecrypt принимает TLdapAttribute.GetRaw binary и обнуляет временный cleartext buffer. Новые возможности mormot.lib.sspi 622071a5+108-13

lib: new NCrypt.LapsDecrypt method

Влияние

Windows directory backends могут расшифровать msLAPS-EncryptedPassword в процессе; unsupported systems и bad data вызывают ENCrypt.

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

Используйте raw binary LDAP attribute, обрабатывайте ENCrypt и минимизируйте lifetime возвращённого password.

Публичный API

  • TNCrypt.Unprotectadded — Unprotect data через Windows NCrypt APIs.
  • TNCrypt.LapsDecryptadded — Декодирует msLAPS encrypted-password attribute.

Модули

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

15 Средний Bindings Crypt32 получают примитивы создания self-signed certificates mormot.lib.sspi объявляет CertStrToNameW и CertCreateSelfSignCertificate, а mormot.core.os добавляет читаемое имя CRYPT_E_NOT_FOUND. Новые возможности mormot.core.os+1 d6d52bf0+20-7

lib: enhanced crypt32.dll WinAPI support

Влияние

Windows backends могут создавать names и self-signed certificate contexts через raw Crypt32 API; существующий код не меняется.

Публичный API

  • CertStrToNameWadded — Raw declaration преобразования имени Crypt32.
  • CertCreateSelfSignCertificateadded — Raw declaration Crypt32 для self-signed certificate.

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

16 Средний Wine помечается как небезопасный для CNG calls TWindowsSpec получает wsWeakCng; Wine выставляет его, а InitializeNCrypt пропускает ncrypt.dll из-за stubs, сообщающих success без реализации. Компилятор и платформы mormot.core.os+1 1d60fd28+15-13

lib: don't try to use CNG on Wine

Влияние

Приложения под Wine больше не выполняют ненадёжные CNG operations; native Windows не меняется.

Публичный API

  • TWindowsSpec.wsWeakCngadded — Отмечает среды с unusable CNG APIs.

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

17 Низкий LocalFree опубликован с удобной для pointer сигнатурой mormot.core.os добавляет public LocalFree(pointer): pointer, а Windows security code убирает внутренние HLOCAL casts. Новые возможности mormot.core.os+1 79a03b23+8-5

core: new LocalFree() public function for Windows

Влияние

Windows code может освобождать результаты LocalAlloc без HLOCAL casts; существующий Delphi/FPC код совместим.

Публичный API

  • LocalFreeadded — Public Windows declaration с pointer.

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

18 Низкий Коды Windows CNG получают читаемые имена ошибок WinErrorShort и OSErrorShort распознают NTE_* от CNG; core tests получают соответствующее покрытие. Компилятор и платформы mormot.core.os+1 3c49fdbf+19-5

core: recognize NTE_* errors as returned by CNG Windows API

Влияние

Ошибки CNG получают diagnostic names вместо чисел; прочее application behavior не меняется.

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

19 Низкий Helper расшифровки msLAPS упрощён без изменения контракта TNCrypt.LapsDecrypt убирает лишнее local state, использует длину header напрямую и исправляет текст LDAPS/msLAPS. Внутреннее устройство mormot.lib.sspi 32e7d9b3+13-15

lib: NCrypt.LapsDecrypt() cleanup

Влияние

Влияния на application code нет; public signature и результат не меняются.

Модули

Arnaud Bouchez · 14:19 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