mORMot2 DailyLecture quotidienne des commits upstream

SChannel gagne le mTLS natif et les courses au démarrage serveur sont éliminées

Les serveurs Windows peuvent désormais exiger et valider les certificats clients avec SChannel, via les stores de confiance et callbacks existants de TNetTlsContext. Une seconde série corrige la construction des serveurs HTTP et async afin que leurs threads principaux ne démarrent pas avant les sockets, workers et références croisées. Les équipes utilisant le mTLS Windows ou créant des serveurs sous charge doivent viser la build finale.

En bref

  • Visez la build 2.4.17294 au commit de8d47ea7122b30aa81296a1e5e899a3909e34b1.
  • Les serveurs SChannel implémentent le mTLS via ClientCertificateAuthentication, CACertificatesFile, CASystemStores, CACertificatesRaw, OnEachPeerVerify et OnAfterPeerValidate.
  • Les threads des serveurs HTTP et async restent suspendus jusqu’à l’initialisation des sockets, workers et liens d’ownership.
  • Mettez à niveau pour le chargement de CACertificatesRaw, les erreurs explicites de certificat client absent et les corrections finales SChannel.
  • Les ajouts publics comprennent acoCreateSuspended, ConsoleLock/ConsoleUnLock et WinCryptTextToBinary.

Conseil de mise à jour

Visez la build 2.4.17294. Mettez à niveau si un serveur Windows utilise l’authentification par certificat client, si CACertificatesRaw fournit les ancres de confiance, ou si des serveurs HTTP/async sont créés sous concurrence. Vérifiez les chaînes acceptées/refusées, les overrides OnEachPeerVerify, le contexte OnAfterPeerValidate et le démarrage de THttpServer comme THttpAsyncServer. Aucun superseded_by n’étaye une plage formelle à éviter ; prenez les séries complètes.

Build2.4.17268 → 2.4.17294
Commits26
Lignes+1526 -492
Lecture6 min

26 sur 26 entrées · 26 commits upstream

Sujets
# Entrée Catégorie Unités
1 Élevée Le mTLS SChannel gagne la compatibilité Windows 7 et des contrôles de chaîne plus stricts mormot.net.sock.windows utilise la structure CERT_CHAIN_ENGINE_CONFIG courte compatible Windows 7, refuse les systèmes plus anciens pour le mTLS, affine EKU/trust et corrige le nettoyage du chain engine. Correctifs mormot.net.sock.windows 9d610a05+36-20

net: several SChannel fixes

Impact

Windows 7 peut utiliser le nouveau mTLS serveur ; les systèmes plus anciens reçoivent un résultat unsupported clair. Les ressources de chaîne sont libérées correctement.

Arnaud Bouchez · 12:56 UTC · voir le commit sur GitHub →

2 Élevée Les dernières corrections SChannel évitent les conflits de types et les téléchargements bloquants mormot.net.sock.windows utilise ses propres pointeurs de contexte certificat, active SCH_CRED_CACHE_ONLY_URL_RETRIEVAL_ON_CREATE et finalise les guards de version Windows. Cela évite le conflit PCCERT_CONTEXT du RTL Delphi et les téléchargements réseau pendant la création des credentials. Correctifs mormot.net.sock.windows+1 9a2fec3f+17-12

net: latest SChannel fixes

Impact

Les builds Windows Delphi et FPC obtiennent un chemin mTLS final stable, sans blocage au démarrage pour récupérer une chaîne par URL. Les backends non-Windows ne changent pas.

Arnaud Bouchez · 19:09 UTC · voir le commit sur GitHub →

3 Élevée Les threads serveur ne démarrent qu’après la fin de la construction TLoggedThread.AfterConstruction appelle inherited avant Start. THttpServerGeneric et TAsyncConnections créent toujours leur thread RTL suspendu, mémorisent l’option demandée et ne démarrent qu’après construction ; THttpAsyncServer passe à esRunning après validation du socket lié. Correctifs mormot.core.threads+2 0b8d9252+11-9

net: fixed previous commits

Impact

Les serveurs HTTP et async ne courent plus contre leurs constructeurs et ne signalent plus running avant un bind réussi. Tous les backends Delphi/FPC utilisant ces classes sont concernés.

API publique

  • TLoggedThread.AfterConstructionbehaviour-changed

Arnaud Bouchez · 17:34 UTC · voir le commit sur GitHub →

4 Élevée Les serveurs HTTP classiques conservent toute la policy client-auth par connexion THttpServerSocket.Create copie le TNetTlsContext complet dans chaque connexion acceptée lorsque l’authentification client est active, puis réinitialise l’état transitoire. La validation OpenSSL efface aussi LastError et ne calcule la vérification qu’une fois. Correctifs mormot.lib.openssl11+2 7b63898e+14-6

net: some TLS fixes especially on OpenSSL and THttpServer

Impact

Les connexions THttpServer threaded conservent les CA et callbacks nécessaires au mTLS. Les callbacks OpenSSL n’héritent plus d’une ancienne erreur.

API publique

  • THttpServerSocket.Createbehaviour-changed

Arnaud Bouchez · 11:18 UTC · voir le commit sur GitHub →

5 Élevée SChannel signale clairement les credentials clients absents et les échecs de confiance Le chemin TLS Windows reconnaît SEC_E_NO_CREDENTIALS pour un certificat client absent, enrichit les erreurs SSPI et resserre la gestion des échecs de chain policy tout en conservant les overrides de callback. Correctifs mormot.core.os+2 13a977c1+10-5

net: better SSPI/SChannel error handling

Impact

Le rejet mTLS devient explicite et diagnosticable au lieu d’un échec de handshake ambigu. Les serveurs Windows Delphi/FPC sont concernés.

Arnaud Bouchez · 13:30 UTC · voir le commit sur GitHub →

6 Élevée Les certificats CA en mémoire atteignent désormais la validation SChannel TSChannelServerContext.Create corrige l’association d’un else dans le choix des sources de confiance, afin que CACertificatesRaw soit analysé et ajouté quand aucun fichier ni store système ne fournit les CA. Correctifs mormot.net.sock.windows 4355bdd9+5-3

net: fixed SChannel CACertificatesRaw[] support

Impact

Les serveurs mTLS Windows passant leurs roots PEM via CACertificatesRaw valident désormais contre ces roots au lieu de les ignorer silencieusement.

API publique

  • TNetTlsContext.CACertificatesRawbehaviour-changed

Arnaud Bouchez · 13:57 UTC · voir le commit sur GitHub →

7 Élevée Les serveurs Windows SChannel peuvent exiger un certificat client TSChannelServerContext implémente le mTLS serveur depuis TNetTlsContext : chargement des CA, chain engine exclusif si nécessaire, demande de credentials clients, contrôle de l’EKU client-auth et appels OnEachPeerVerify/OnAfterPeerValidate. Nouveautés mormot.net.sock+1 cbc906b6+368-38

net: implement mTLS using SChannel

Impact

Les backends Windows peuvent utiliser SChannel natif pour le TLS mutuel sans passer à OpenSSL. Les serveurs existants restent en TLS unidirectionnel tant que ClientCertificateAuthentication est désactivé.

À regarder

Pour adopter le mTLS SChannel, configurez une source CA et testez les deux callbacks avec votre policy sur 2.4.17294.

API publique

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

Arnaud Bouchez · 12:25 UTC · voir le commit sur GitHub →

8 Moyenne Les familles de serveurs HTTP adoptent un démarrage différé TAsyncConnections et THttpServerGeneric définissent TLoggedThread.fStartAfterConstruction depuis leurs options publiques de suspension, tandis que THttpApiServer supprime son Start manuel car la classe de base gère le timing. Correctifs mormot.net.async+1 2acff7c1+5-21

net: fixed servers main thread startup

Impact

Il s’agit d’une correction intermédiaire ensuite ajustée par 0b8d9252. Ne la cherry-pickez pas sans la fin de la série.

Arnaud Bouchez · 17:16 UTC · voir le commit sur GitHub →

9 Moyenne THttpAsyncServer relie ses threads avant leur exécution THttpAsyncServer.Create construit le thread hérité et fAsync suspendus, affecte les références réciproques, puis démarre le côté async et attend le bind du socket. Correctifs mormot.net.async fb7baf23+17-6

net: fixed THttpAsyncServer.Create thread startup sequence

Impact

Cela supprime une fenêtre où un thread pouvait déréférencer un owner absent. C’est une étape intermédiaire complétée ensuite.

Arnaud Bouchez · 16:22 UTC · voir le commit sur GitHub →

10 Moyenne Les déclarations SChannel exposent les chain engines de certificats Windows mormot.lib.sspi ajoute les structures, callbacks, constantes et imports Windows nécessaires pour créer des chain engines restreints et évaluer la policy SSL des certificats clients. Nouveautés mormot.lib.sspi a1586a7c+154-2

lib: SChannel cert chain API support

Impact

Le code Windows Delphi/FPC bas niveau peut appeler directement les chain APIs et le mTLS SChannel dispose des déclarations nécessaires. Les autres plateformes ne changent pas.

API publique

  • Windows certificate-chain API declarationsadded

Arnaud Bouchez · 06:33 UTC · voir le commit sur GitHub →

11 Moyenne Les serveurs OpenSSL appellent désormais le callback final de validation peer TOpenSslNetTls.AfterAccept appelle TNetTlsContext.OnAfterPeerValidate après un handshake serveur réussi, avec le contexte TLS, le certificat peer, le cipher et le résultat de validation. Nouveautés mormot.lib.openssl11 bda449fe+36-8

lib: TOpenSslNetTls.AfterAccept implements OnAfterPeerValidate callback

Impact

Les utilisateurs OpenSSL obtiennent la parité avec SChannel. Les callbacks existants peuvent désormais s’exécuter lors des accept serveur.

À regarder

Examinez les handlers OnAfterPeerValidate pour leurs hypothèses côté serveur et testez certificats acceptés et rejetés.

API publique

  • TNetTlsContext.OnAfterPeerValidatebehaviour-changed

Arnaud Bouchez · 09:59 UTC · voir le commit sur GitHub →

12 Moyenne TAsyncConnections peut être construit avec sa boucle principale suspendue L’option publique acoCreateSuspended est ajoutée à TAsyncConnectionsOptions. TAsyncConnections.Create l’utilise pour suspendre le thread principal jusqu’à ce que workers et initialisation soient prêts. Nouveautés mormot.net.async 342146c9+12-5

net: fixed TAsyncConnections main thread execution

Impact

Les descendants async personnalisés peuvent contrôler le démarrage. Les sets existants gardent leur défaut et le framework utilise l’option pour un startup sûr.

API publique

  • acoCreateSuspendedadded

Arnaud Bouchez · 16:10 UTC · voir le commit sur GitHub →

13 Moyenne Le package agrégé Lazarus inclut désormais la cryptographie Windows packages/lazarus/mormot2.pas ajoute mormot.crypt.win à ses uses afin que le package FPC agrégé compile et enregistre la nouvelle unit cryptographique Windows. Compilateur & plateforme mormot2+1 de8d47ea+8-7

fpc: fixed mormot2 package source

Impact

Les utilisateurs du package Lazarus ne perdent plus les symboles de mormot.crypt.win. Les projets Delphi et les projets FPC listant les units directement ne changent pas.

Arnaud · 21:05 UTC · voir le commit sur GitHub →

14 Moyenne L’initialisation HTTP async publie son état avant l’exécution mormot.net.async et mormot.net.ws.async avancent les flags accept-only, la publication du socket, les liens d’owner et l’initialisation WebSocket keep-instance avant toute exécution des workers et de la boucle principale. Sous le capot mormot.net.async+1 47868569+103-89

net: async HTTP server code cleanup

Impact

La pile async voit un état cohérent du constructeur, réduisant les races. Cette étape est finalisée par 0b8d9252 et ne demande aucune migration.

Arnaud Bouchez · 16:41 UTC · voir le commit sur GitHub →

15 Moyenne TLoggedThread reçoit un déclencheur interne après construction mormot.core.threads ajoute le flag protégé fStartAfterConstruction et override AfterConstruction afin que les descendants restent suspendus jusqu’à la fin de leur construction. Sous le capot mormot.core.threads b698a9c6+13-4

core: introducing TLoggedThread.fStartAfterConstruction flag

Impact

Ce mécanisme interne soutient la correction du démarrage serveur. Les threads applicatifs existants ne changent pas sauf si un descendant active le flag protégé.

Arnaud Bouchez · 17:13 UTC · voir le commit sur GitHub →

16 Faible TSynTests sérialise les mises à jour console multithread mormot.core.test entoure les séquences de progression, couleur et erreurs de TSynTests avec ConsoleLock et ConsoleUnLock afin que les suites parallèles ne mélangent pas l’état du curseur et des couleurs. Correctifs mormot.core.test de6c7467+50-35

core: fixed TSynTests console output

Impact

La sortie des tests parallèles reste lisible. Les backends applicatifs ne sont pas concernés sauf usage direct de TSynTests.

Arnaud Bouchez · 15:04 UTC · voir le commit sur GitHub →

17 Faible Un wrapper Windows décode le texte certificat PEM et Base64 mormot.core.os.security ajoute WinCryptTextToBinary, wrapper public RawUtf8 vers RawByteString autour de CryptStringToBinaryA avec CRYPT_STRING_BASE64HEADER par défaut, et optimise WinCryptBinaryAppendAsText. Nouveautés mormot.core.os.security d344d129+43-8

core: new WinCryptTextToBinary() wrapper function

Impact

Le code Windows gagne un helper contrôlé pour décoder PEM/Base64. Les appelants existants restent compatibles et peuvent l’adopter.

API publique

  • WinCryptTextToBinaryadded

Arnaud Bouchez · 09:46 UTC · voir le commit sur GitHub →

18 Faible Un verrouillage console public protège les séquences de sortie atomiques mormot.core.os ajoute ConsoleLock et ConsoleUnLock au-dessus du ConsoleCriticalSection réentrant afin de protéger une mise à jour console multi-appels comme une seule séquence. Nouveautés mormot.core.os 3f2d5e44+18-2

core: new ConsoleLock/ConsoleUnLock functions

Impact

Les outils et tests peuvent empêcher l’entrelacement des sorties entre threads. Les appels console existants gardent leur comportement.

API publique

  • ConsoleLockadded
  • ConsoleUnLockadded

Arnaud Bouchez · 15:03 UTC · voir le commit sur GitHub →

19 Faible Les erreurs de confiance Windows reçoivent des noms lisibles mormot.core.os étend la résolution des codes Windows avec les constantes SChannel, SSPI et certificate-trust afin d’afficher des noms symboliques pour les échecs de chaîne et de policy. Compilateur & plateforme mormot.core.os 31cf2232+13-7

core: include SChannel/SSPI trust error codes

Impact

Les logs et exceptions sont plus faciles à diagnostiquer. Les décisions de confiance et API restent inchangées.

Arnaud Bouchez · 12:01 UTC · voir le commit sur GitHub →

20 Faible Les helpers de callback TLS et de décodage Windows sont consolidés mormot.lib.openssl11 regroupe l’assemblage du callback peer final dans un helper local, tandis que mormot.lib.sspi réutilise WinCryptTextToBinary au lieu d’un chemin privé CryptStringToBinaryA. Sous le capot mormot.lib.openssl11+1 c9977bb6+32-33

lib: small refactoring of the two previous commits

Impact

Le comportement de vérification TLS reste identique, avec moins de code dupliqué. Aucune migration applicative n’est nécessaire.

Arnaud Bouchez · 10:07 UTC · voir le commit sur GitHub →

21 Faible Un contrôle de longueur JSON est réécrit sans changer son résultat TJsonWriter.AddEscapeBuffer remplace une condition short-circuit par deux contrôles imbriqués sur MaxLen et Len. Le prédicat final reste identique. Sous le capot mormot.core.json 5b7993fc+5-5

core: fixed #626 TJsonWriter.AddEscapeBuffer

Impact

Aucun comportement observable ni API publique ne change ; c’est une réécriture du guard corrigé dans l’édition précédente.

Arnaud Bouchez · 10:14 UTC · PR #626 · voir le commit sur GitHub →

22 Faible La suite réseau reçoit un test serveur mTLS SChannel de bout en bout test.net.proto crée des serveurs Windows SChannel avec authentification par certificat client et exerce les handshakes réussis et refusés avec des identités de test. Tests test.net.proto 1a36278a+332-6

test: cover SChannel mTLS server

Impact

Il s’agit de couverture de régression pour la nouvelle fonction, sans changement de comportement applicatif.

Arnaud Bouchez · 13:10 UTC · voir le commit sur GitHub →

23 Faible Les serveurs de test SChannel tournent désormais en parallèle La suite réseau démarre plusieurs variantes de serveurs SChannel en parallèle, exerçant la sortie console concurrente et des cycles de vie TLS indépendants. Tests test.net.proto 2f892a9e+141-118

test: made SChannel servers run in parallel

Impact

Seul le harnais de test change ; aucun comportement ni API de production n’est modifié.

Arnaud Bouchez · 15:06 UTC · voir le commit sur GitHub →

24 Faible Les tests SChannel couvrent la matrice complète d’authentification client TNetworkProtocols._SChannel étend la matrice TLS Windows finale sur les implémentations serveur, les sources de CA et les résultats de certificats clients. Tests test.net.proto eddc9ae5+35-33

test: completed TNetworkProtocols._SChannel

Impact

La couverture de régression augmente ; le code applicatif et le runtime Delphi/FPC ne changent pas.

Arnaud Bouchez · 16:09 UTC · voir le commit sur GitHub →

25 Faible Les tests serveur OpenSSL exercent davantage de validations TLS test.net.proto étend la couverture des serveurs TLS OpenSSL avec le comportement partagé du callback de validation et les cas SChannel de certificat client. Tests test.net.proto 09e6e909+29-7

test: enhanced OpenSSL TLS server coverage

Impact

C’est uniquement de la couverture de tests, avec des contrôles de parité OpenSSL/SChannel sans changement d’API publique.

Arnaud Bouchez · 15:18 UTC · voir le commit sur GitHub →

26 Faible Les tests SChannel ajoutent des cas limites de confiance et callbacks test.net.proto élargit la couverture SChannel autour des sources CA, callbacks peer et résultats de certificat client pendant la finalisation de l’implémentation. Tests test.net.proto 170f4c56+19-3

tests: better SChannel coverage

Impact

Le changement améliore uniquement la détection de régressions ; aucun code applicatif ni API publique ne change.

Arnaud Bouchez · 13:37 UTC · voir le commit sur GitHub →

Activité upstream commits par jour · 60 derniers jours
Commits977
Jours actifs44/60
Plus chargé2026-09-30
Pic60
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