Agir maintenantpeut affecter un système en productionLes 19 commits non-merge de 2.4.17190 à 2.4.17208 ont été examinés : 1176 ajouts et 372 suppressions dans 11 fichiers hors version. Les changements de mormot.commit.inc et mormot.commit-num.inc sont ignorés. Le raw ne contient aucun superseded_by ; avoid et still_moving restent vides, et la tête upstream finale correspond au payload.
SChannel active TLS 1.3 tandis que le support Windows CNG se consolide
Cette série centrée sur Windows modifie la politique protocolaire SChannel par défaut, partage les credentials serveur entre connexions HTTPS acceptées et ajoute un support important de CNG, des certificate stores et de msLAPS. Les derniers commits corrigent aussi les compilations Delphi 7 et Delphi 13, évitent les stubs CNG de Wine et réparent l’ownership des clés privées.
En bref
- Visez la build 2.4.17208 au commit 18e7d88c0083b279402c59019c030abdfe39e3e1.
- SChannelEnableTls13 vaut désormais true par défaut sur Windows 11 et Windows Server 2022 ou plus récent ; passez-le à false avant l’initialisation si ce déploiement n’est pas voulu.
- Les serveurs HTTPS SChannel acquièrent un credential serveur partagé, conservé jusqu’à la libération du dernier contexte TLS accepté.
- TNetTlsContext peut fournir à SChannel un PCCERT_CONTEXT ou un PFX protégé, et ReleaseBuffers libère maintenant les buffers SChannel inactifs.
- Les wrappers TNCrypt, TWinCertStore et TWinCertCngKey exposent clés CNG, certificate stores, signature, unprotection de secrets et déchiffrement msLAPS.
- Wine évite sa couche CNG incomplète, tandis que Delphi 7 et Delphi 13 reçoivent des correctifs de compilation explicites.
Conseil de mise à jour
Les utilisateurs SChannel Windows doivent prendre toute l’édition jusqu’à 2.4.17208, puis tester TLS 1.3, le chargement certificat/PFX et l’arrêt serveur concurrent. Positionnez SChannelEnableTls13 à false avant TLS seulement si le nouveau défaut n’est pas acceptable. Delphi 7, Delphi 13 et Wine doivent inclure les correctifs finaux.
19 sur 19 entrées · 19 commits upstream
1
Élevée
TLS 1.3 devient le défaut SChannel sur Windows actuel
La globale publique SChannelEnableTls13 passe par défaut de false à true. Elle ne s’applique qu’à Windows 11 et Windows Server 2022 ou plus récent et reste désactivable.
Ruptures
mormot.net.sock
f479106f+6-5
net: now SChannelEnableTls13 default is true
Impact
Les clients et serveurs SChannel éligibles peuvent négocier TLS 1.3 sans changement applicatif ; le comportement protocolaire peut donc changer silencieusement après recompilation.
À regarder
Testez handshakes, cipher policy et compatibilité peer ; passez SChannelEnableTls13 à false avant l’initialisation si nécessaire.
API publique
SChannelEnableTls13behaviour-changed — La valeur par défaut est true sur les versions Windows prises en charge.
Unités
2
Élevée
Les layouts de certificats sont corrigés après l’extension Crypt32
Les types Crypt32 passent dans mormot.core.os.security et leurs déclarations pointer, blob et record sont corrigées pour compiler mormot.lib.sspi.
Correctifs
mormot.core.os.security+1
d73d5445+14-8
lib: fixed mormot.lib.sspi compilation
Impact
Ce correctif répare le changement Windows immédiatement précédent. Les projets Delphi et FPC ne doivent pas prendre seule la révision intermédiaire.
Mise à jour recommandée
Prenez-le avec le commit Crypt32 précédent, ou utilisez la tête finale de l’édition.
3
Élevée
L’ownership des clés de certificat SChannel est corrigé sous PRISM
TSChannelNetTls.AfterBind retire CRYPT_ACQUIRE_CACHE_FLAG, initialise les sorties d’ownership pour chaque certificat et libère les handles CAPI ou CNG appartenant à l’appelant.
Correctifs
mormot.core.os.security+1
86828b99+12-3
net: fixed TSChannelNetTls.AfterBind on PRISM
Impact
Le setup serveur SChannel évite les états de sortie périmés et les fuites de handles de clé privée, y compris sur PRISM. Aucune migration source.
Mise à jour recommandée
Mettez à niveau les serveurs SChannel qui lient des clés privées et retestez shutdown/rebind.
4
Élevée
Logging serialization et acceptation SChannel recompilent après les nouveaux flags
La sérialisation TWindowsSpecs passe de byte à word après wsWeakCng, et le chemin accept SChannel stocke le contexte partagé dans un local TObject avant cast.
Correctifs
mormot.core.log+1
37405644+9-6
core: fixed compilation after previous commits
Impact
Ce commit ferme des problèmes de compilation introduits par les changements Windows-spec et shared context. Aucun changement source applicatif.
Mise à jour recommandée
Prenez le flag Wine et le contexte SChannel partagé avec ce correctif compilateur.
5
Élevée
SChannel accepte les contextes certificat et les PFX protégés
Le backend SChannel implémente CertificateRaw, PrivatePassword et OnPrivatePassword de TNetTlsContext pour les certificats serveur, implémente ReleaseBuffers, valide les clés privées et rejette explicitement ClientCertificateAuthentication non pris en charge.
Nouveautés
mormot.lib.sspi+2
3f0914a0+76-31
net: enhanced SChannel TLS layer
Impact
Windows servers peuvent fournir un PCCERT_CONTEXT existant ou un PFX protégé sans OpenSSL. Les configurations demandant l’authentification client SChannel échouent maintenant explicitement.
À regarder
Testez import certificat, callbacks mot de passe et libération des buffers ; n’activez pas ClientCertificateAuthentication sous SChannel.
API publique
TNetTlsContext.CertificateRawbehaviour-changed — Le serveur SChannel consomme maintenant un PCCERT_CONTEXT.TNetTlsContext.PrivatePasswordbehaviour-changed — Utilisé comme mot de passe import PFX SChannel.TNetTlsContext.OnPrivatePasswordbehaviour-changed — Peut remplacer le mot de passe PFX SChannel.INetTls.ReleaseBuffersbehaviour-changed — SChannel libère maintenant les buffers read/write inactifs.
6
Élevée
Un wrapper certificat-vers-clé CNG centralise les contrôles d’ownership
TWinCertCngKey acquiert la clé privée d’un certificat, exige un handle CNG, compare optionnellement la clé publique et libère selon l’ownership CryptAcquireCertificatePrivateKey. Les constantes associées passent dans core security.
Nouveautés
mormot.core.os+3
73dc5e6a+87-20
lib: new TWinCertCngKey wrapper
Impact
SChannel et les autres backends Windows obtiennent une frontière de lifetime vérifiée pour les clés CNG de certificat, réduisant fuites et confusion CAPI.
À regarder
Utilisez Init/Done ensemble et activez CompareKey si un mismatch certificat/clé doit être rejeté.
API publique
TWinCertCngKeyadded — Wrapper vérifié à courte durée pour une clé privée CNG.
7
Élevée
Les serveurs HTTPS SChannel partagent un credential entre connexions
TSChannelNetTls.AfterBind crée un TSChannelServerContext reference-counted contenant le CredHandle serveur. Les connexions l’utilisent en commun et le libèrent après leurs propres contextes sécurité.
Performance
mormot.net.sock.windows
73798d46+193-140
net: shared credentials for the HTTPS server using SChannel
Impact
Les serveurs HTTPS Windows chargés évitent AcquireCredentialsHandleW par connexion et obtiennent un ordre de lifetime explicite. Protocole et API applicative inchangés.
Mise à jour recommandée
Testez en charge les cycles accept/shutdown SChannel et vérifiez la libération après la dernière connexion.
Unités
8
Élevée
La déclaration de factory TLS devient compatible Delphi 7
mormot.net.sock introduit le type public TNewNetTls pour NewNetTls et déplace une constante caractère au niveau module pour Delphi 7.
Compilateur & plateforme
mormot.net.sock
a51ffadf+11-7
net: fixed Delphi 7 compilation
Impact
Les projets Delphi 7 recompilent après les changements TLS. Les autres compilateurs voient un type nommé pour la variable factory existante.
Mise à jour recommandée
Les utilisateurs Delphi 7 doivent prendre ce correctif avec toute la série SChannel.
API publique
TNewNetTlsadded — Type fonction public utilisé par NewNetTls.
Unités
9
Élevée
Le chemin certificat SChannel final compile sous Delphi 13
mormot.net.sock.windows retire un cast PCCERT_CONTEXT explicite autour de Context.CertificateRaw pour respecter le typage Delphi 13.
Compilateur & plateforme
mormot.net.sock.windows
18e7d88c+3-4
net: fixed Dlephi 13 compilation
Impact
Les projets Delphi 13 utilisant le nouveau chemin SChannel CertificateRaw compilent à la tête finale. Le comportement runtime ne change pas.
Mise à jour recommandée
Les utilisateurs Delphi 13 doivent viser ce commit final plutôt qu’un point antérieur de la série SChannel.
Unités
10
Moyenne
Les métadonnées certificat et la signature CNG sont renforcées
TWinCertInfo enregistre provider type, flags et key spec ; les bindings d’énumération sont ajoutés ; NTE_BAD_PUBLIC_KEY est nommé ; et le chemin ECDSA initialise le pointeur algorithme PKCS#1 à nil.
Correctifs
mormot.core.os+2
6e9ef943+44-15
core: enhanced Windows SSPI/CNG API wrappers
Impact
Les consommateurs disposent des informations provider pour choisir CAPI ou CNG, et la signature ECDSA ne transmet plus de padding non initialisé.
Mise à jour recommandée
Mettez à niveau les utilisateurs du nouveau chemin CNG et validez les certificats RSA et ECDSA de chaque provider.
API publique
TWinCertInfo.KeyProviderTypeadded — Expose le type de provider de clé.TWinCertInfo.KeyProviderFlagsadded — Expose les flags d’acquisition provider.TWinCertInfo.KeySpecadded — Expose la key specification du certificat.
11
Moyenne
Le wrapper CNG gagne les helpers complets de property, signature et decrypt
TNCrypt ajoute handles typés, modes hash/signature, opérations brutes OpenKey/GetProperty/SignHash/Decrypt et helpers GetCardinal, GetBuffer, KeyBits, KeyUsage et KeySign.
Nouveautés
mormot.lib.sspi
6a4f0636+250-24
lib: completed CNG API wrapper
Impact
Windows backends peuvent inspecter et utiliser les clés privées CNG, dont les signatures RSA PKCS#1/PSS et ECDSA, via des wrappers vérifiés levant ENCrypt.
À regarder
Choisissez TNcryptSignMode explicitement, vérifiez key usage et testez les signatures avec un vérificateur indépendant.
API publique
TNcryptHashAlgoadded — Sélecteur hash public pour la signature CNG.TNcryptSignModeadded — Sélecteur public de mode RSA/ECDSA.TNCrypt.KeySignadded — Helper de signature CNG vérifié.
Unités
12
Moyenne
Les certificate stores Windows gagnent un itérateur propriétaire et l’export PEM
mormot.core.os.security introduit TWinCertStore et TWinCertStoreLocation avec Create, Next, Duplicate et ToPem, ainsi que WinCryptBinaryAppendAsText. La collecte PEM existante est refactorée dessus.
Nouveautés
mormot.core.os.security+1
4211be31+155-48
core: new TWinCertStore wrapper and associated raw API
Impact
Windows backends peuvent énumérer les stores, dupliquer les contextes durables et exporter en PEM. L’objet possède son store et son contexte courant.
À regarder
Appelez Duplicate avant de conserver Context au-delà du prochain Next et libérez chaque TWinCertStore.
API publique
TWinCertStoreLocationadded — Sélecteur public de location du certificate store.TWinCertStoreadded — Itérateur propriétaire de certificate store Windows.WinCryptBinaryAppendAsTextadded — Ajoute des données Windows sous forme PEM/base64.
13
Moyenne
Une couche publique CNG key storage chargée tardivement apparaît
mormot.lib.sspi introduit ENCrypt, TNCrypt et la factory NCrypt avec chargement dynamique des opérations provider, création, property, finalize, delete et free.
Nouveautés
mormot.core.os+1
373f69f3+133-3
lib: introducing Windows Cryptography API: Next Generation (CNG) API
Impact
Windows backends peuvent utiliser CNG sans dépendance statique à ncrypt.dll. XP reste sans CNG et les appelants doivent respecter la disponibilité runtime.
À regarder
Conditionnez CNG à la disponibilité de NCrypt et testez le cleanup provider/key sur chaque Windows pris en charge.
API publique
ENCryptadded — Exception publique pour les échecs NCrypt/CNG.TNCryptadded — Wrapper CNG key storage chargé tardivement.NCryptadded — Factory globale du wrapper CNG.
14
Moyenne
NCrypt peut unprotect les secrets et décoder les valeurs msLAPS chiffrées
TNCrypt gagne Unprotect et LapsDecrypt sur les API de protection optionnelles Windows 8+. LapsDecrypt accepte le binaire TLdapAttribute.GetRaw et efface le buffer cleartext temporaire.
Nouveautés
mormot.lib.sspi
622071a5+108-13
lib: new NCrypt.LapsDecrypt method
Impact
Windows directory backends peuvent déchiffrer msLAPS-EncryptedPassword en processus. Un système non pris en charge ou des données invalides lèvent ENCrypt.
À regarder
Utilisez uniquement l’attribut LDAP binaire brut, gérez ENCrypt et minimisez la durée de vie du mot de passe retourné.
API publique
TNCrypt.Unprotectadded — Unprotect via les API Windows NCrypt.TNCrypt.LapsDecryptadded — Décode un attribut mot de passe chiffré msLAPS.
Unités
15
Moyenne
Les bindings Crypt32 gagnent la création de certificats auto-signés
mormot.lib.sspi déclare CertStrToNameW et CertCreateSelfSignCertificate, et mormot.core.os donne un nom lisible à CRYPT_E_NOT_FOUND.
Nouveautés
mormot.core.os+1
d6d52bf0+20-7
lib: enhanced crypt32.dll WinAPI support
Impact
Windows backends peuvent créer des noms et contextes auto-signés via l’API Crypt32 brute ; le code applicatif existant ne change pas.
API publique
CertStrToNameWadded — Déclaration brute de conversion de nom Crypt32.CertCreateSelfSignCertificateadded — Déclaration brute Crypt32 de certificat auto-signé.
16
Moyenne
Wine est marqué comme non fiable pour les appels CNG
TWindowsSpec gagne wsWeakCng ; Wine le positionne et InitializeNCrypt ignore ncrypt.dll car ses stubs annoncent un succès sans effectuer l’opération.
Compilateur & plateforme
mormot.core.os+1
1d60fd28+15-13
lib: don't try to use CNG on Wine
Impact
Les applications mORMot2 sous Wine n’essaient plus des opérations CNG non fiables. Le comportement Windows natif ne change pas.
Mise à jour recommandée
Les déploiements Wine utilisant CNG doivent gérer l’indisponibilité de NCrypt et prévoir une alternative.
API publique
TWindowsSpec.wsWeakCngadded — Marque les environnements aux API CNG inutilisables.
17
Faible
LocalFree est exposé avec une signature adaptée aux pointers
mormot.core.os ajoute LocalFree(pointer): pointer au public et le code Windows security retire les casts HLOCAL internes.
Nouveautés
mormot.core.os+1
79a03b23+8-5
core: new LocalFree() public function for Windows
Impact
Le code Windows peut libérer les résultats LocalAlloc sans cast HLOCAL. Le code Delphi/FPC existant reste compatible.
API publique
LocalFreeadded — Déclaration Windows publique en pointer.
18
Faible
Les codes d’état Windows CNG reçoivent des noms lisibles
WinErrorShort et OSErrorShort reconnaissent la plage NTE_* renvoyée par CNG, avec couverture ajoutée aux tests core.
Compilateur & plateforme
mormot.core.os+1
3c49fdbf+19-5
core: recognize NTE_* errors as returned by CNG Windows API
Impact
Les échecs CNG affichent des noms diagnostiques plutôt que des codes numériques. Le comportement applicatif ne change pas.
Unités
19
Faible
Le helper de déchiffrement msLAPS est simplifié sans changer son contrat
TNCrypt.LapsDecrypt retire un état local redondant, utilise directement la longueur du header et corrige un libellé LDAPS/msLAPS.
Sous le capot
mormot.lib.sspi
32e7d9b3+13-15
lib: NCrypt.LapsDecrypt() cleanup
Impact
Aucun impact applicatif attendu ; la signature publique et le résultat déchiffré ne changent pas.