Définir TLSOptions.VerifyCertificate sur True établit que la chaîne de certificats du serveur est approuvée et qu'elle nomme l'hôte auquel on se connecte. Cela ne dit rien sur le fait que ce certificat ait été révoqué ou non depuis sa délivrance.
Cette lacune est importante : une clé privée volée dont le certificat a été révoqué mais n'a pas encore expiré s'authentifie toujours avec succès, ce qui est précisément le cas que la révocation existe pour couvrir. La révocation n'est vérifiée que lorsqu'elle est demandée, via TLSOptions.SChannel_Options.Revocation.
oClient.TLS := True;
oClient.TLSOptions.IOHandler := iohSChannel;
oClient.TLSOptions.VerifyCertificate := True;
oClient.TLSOptions.SChannel_Options.Revocation.Check := scrcChainExcludeRoot;
Le statut est récupéré pendant la construction de la chaîne de certificats, ce qui signifie que le point de distribution CRL ou le répondeur OCSP nommé par le certificat est contacté durant le handshake. C'est pourquoi la vérification est désactivée par défaut : l'activer ajoute du trafic réseau à chaque nouvelle connexion.
Sélectionne quelle partie de la chaîne voit son statut de révocation consulté.
| scrcDisabled | Valeur par défaut. Aucun statut de révocation n'est récupéré et aucun n'est requis. |
| scrcEndCertificate | Seul le certificat du serveur est vérifié. L'option la moins coûteuse, une seule consultation par connexion. |
| scrcChainExcludeRoot | Le certificat du serveur et les certificats intermédiaires sont vérifiés, la racine ne l'est pas. Le choix habituel, car une racine auto-signée publie rarement une CRL pour elle-même. |
| scrcChain | Toute la chaîne, y compris la racine. |
Millisecondes accordées à l'ensemble de la récupération de révocation, et non par URL, de sorte qu'un répondeur qui ne répond pas ne puisse pas bloquer le handshake. Valeur par défaut 5000. Une valeur de zéro laisse la valeur par défaut de Windows en vigueur, qui peut être considérablement plus longue.
Lorsqu'elle vaut True, seules les données de révocation que Windows a déjà mises en cache sont utilisées et le handshake ne va jamais sur le réseau, il n'est donc jamais retardé. Un cache froid laisse alors le statut inconnu, ce que IgnoreNoRevocationCheck décide. Valeur par défaut False.
Décide de ce qui se passe lorsque le répondeur n'a pas pu être joint. Valeur par défaut True, accepter le certificat, ce qui correspond au comportement de type soft-fail utilisé par les navigateurs web. Définissez-la sur False pour rejeter à la place. Rejeter est plus strict, mais cela fait dépendre chaque connexion de l'accessibilité du répondeur, de sorte qu'une panne du répondeur devient une panne de votre application.
Décide de ce qui se passe lorsque le certificat ne publie aucun point de distribution CRL ni aucun répondeur OCSP, de sorte que son statut ne peut pas être établi. Valeur par défaut True, l'accepter.
Aucune des deux propriétés Ignore n'accepte jamais un certificat renvoyé comme confirmé révoqué. Ce résultat est toujours rejeté.
Lorsque la connexion est refusée, la raison parvient à l'événement OnSChannelVerifyPeer sous l'une des formes suivantes :
| ecCryptRevoked | Le certificat a été révoqué par son émetteur. Toujours rejeté. |
| ecCryptRevocationOffline | Le répondeur n'a pas pu être joint. Rejeté uniquement lorsque IgnoreRevocationOffline vaut False. |
| ecCryptNoRevocationCheck | Le certificat ne publie aucune information de révocation. Rejeté uniquement lorsque IgnoreNoRevocationCheck vaut False. |
Définir TLSOptions.Preset sur tlspSecureDefaults active la vérification en tant que scrcChainExcludeRoot, avec les autres valeurs par défaut renforcées, et conserve les deux réglages soft-fail, de sorte que son activation ne casse pas une connexion qui fonctionnait auparavant. Une portée que vous avez choisie vous-même avant d'appliquer le preset reste inchangée.
oClient.TLSOptions.Preset := tlspSecureDefaults;