Agir maintenantpeut affecter un système en productionLes 26 commits non-merge de 2.4.17269 à 2.4.17294 ont été examinés : 1 474 ajouts et 440 suppressions hors mormot.commit.inc et mormot.commit-num.inc. Le head upstream exact a été inspecté. Aucun superseded_by ; l’ordre vient des follow-ups des mêmes units sans plage à éviter.
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.
26 sur 26 entrées · 26 commits upstream
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.
Mise à jour recommandée
Utilisez le head final et incluez la plus ancienne version Windows supportée dans les tests mTLS.
Unités
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.
Mise à jour recommandée
Prenez la build 2.4.17294 et retestez la validation des certificats clients Windows sans URL de chaîne sortante.
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.
Mise à jour recommandée
Visez 2.4.17294 et stressez les cycles create/start/free de THttpServer, THttpAsyncServer et des descendants TAsyncConnections.
API publique
TLoggedThread.AfterConstructionbehaviour-changed
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.
Mise à jour recommandée
Retestez le mTLS via THttpServer et THttpAsyncServer, y compris le rejet et l’acceptation par callback.
API publique
THttpServerSocket.Createbehaviour-changed
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.
Mise à jour recommandée
Vérifiez les logs et le comportement client pour les certificats absents, expirés et non fiables.
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.
Mise à jour recommandée
Mettez à niveau et testez une chaîne cliente valide et invalide lorsque CACertificatesRaw est la seule source de CA.
API publique
TNetTlsContext.CACertificatesRawbehaviour-changed
Unités
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-changedTNetTlsContext.OnEachPeerVerifybehaviour-changedTNetTlsContext.OnAfterPeerValidatebehaviour-changed
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.
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.
Unités
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
Unités
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
Unités
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
Unités
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.
Unités
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.
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é.
Unités
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.
Unités
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
Unités
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
ConsoleLockaddedConsoleUnLockadded
Unités
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.
Unités
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.
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.
Unités
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.
Unités
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é.
Unités
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.
Unités
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.
Unités
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.