TsgcWebSocketClient | SChannel Certificate Revocation

Door TLSOptions.VerifyCertificate op True te zetten, stelt u vast dat de certificaatketen van de server wordt vertrouwd en dat deze de host benoemt waarmee verbinding wordt gemaakt. Het zegt niets over de vraag of dat certificaat sinds de uitgifte is ingetrokken.

Dat verschil is belangrijk: een gestolen privésleutel waarvan het certificaat is ingetrokken maar nog niet is verlopen, wordt nog steeds met succes geauthenticeerd, en dat is precies het geval waarvoor intrekking bestaat. De intrekkingsstatus wordt alleen gecontroleerd wanneer daarom wordt gevraagd, via TLSOptions.SChannel_Options.Revocation.


oClient.TLS := True;
oClient.TLSOptions.IOHandler := iohSChannel;
oClient.TLSOptions.VerifyCertificate := True;
oClient.TLSOptions.SChannel_Options.Revocation.Check := scrcChainExcludeRoot;

De status wordt opgehaald terwijl de certificaatketen wordt opgebouwd, wat betekent dat het CRL-distributiepunt of de OCSP-responder die in het certificaat wordt genoemd, tijdens de handshake wordt benaderd. Daarom staat de controle standaard uit: door deze in te schakelen ontstaat er extra netwerkverkeer bij elke nieuwe verbinding.

Check

Bepaalt voor welk deel van de keten de intrekkingsstatus wordt opgezocht.

scrcDisabled Standaard. Er wordt geen intrekkingsstatus opgehaald en die is ook niet vereist.
scrcEndCertificate Alleen het servercertificaat wordt gecontroleerd. De goedkoopste optie, één opzoeking per verbinding.
scrcChainExcludeRoot Het servercertificaat en de tussenliggende certificaten worden gecontroleerd, het rootcertificaat niet. Dit is de gebruikelijke keuze, omdat een zelfondertekend rootcertificaat zelden een CRL over zichzelf publiceert.
scrcChain De volledige keten, inclusief het rootcertificaat.

Timeout

Het aantal milliseconden dat is toegestaan voor het volledige ophalen van de intrekkingsgegevens, niet per URL, zodat een responder die niet antwoordt de handshake niet kan blokkeren. Standaard 5000. Bij de waarde nul blijft de standaardinstelling van Windows van kracht, die aanzienlijk langer kan zijn.

CacheOnly

Wanneer dit True is, worden alleen intrekkingsgegevens gebruikt die Windows al in de cache heeft opgeslagen en gaat de handshake nooit het netwerk op, zodat deze nooit wordt vertraagd. Bij een lege cache blijft de status dan onbekend, waarover IgnoreNoRevocationCheck beslist. Standaard False.

IgnoreRevocationOffline

Bepaalt wat er gebeurt wanneer de responder niet kon worden bereikt. Standaard True, het certificaat wordt geaccepteerd, wat het soft-fail-gedrag is dat webbrowsers hanteren. Zet dit op False om het in plaats daarvan te weigeren. Weigeren is strenger, maar daardoor is elke verbinding afhankelijk van de bereikbaarheid van de responder, waardoor een storing van de responder een storing van uw toepassing wordt.

IgnoreNoRevocationCheck

Bepaalt wat er gebeurt wanneer het certificaat helemaal geen CRL-distributiepunt en geen OCSP-responder publiceert, zodat de status ervan niet kan worden vastgesteld. Standaard True, het wordt geaccepteerd.

Geen van beide Ignore-eigenschappen accepteert ooit een certificaat dat als bevestigd ingetrokken terugkomt. Die uitkomst wordt altijd geweigerd.

Gerapporteerde fouten

Wanneer de verbinding wordt geweigerd, bereikt de reden de gebeurtenis OnSChannelVerifyPeer als een van de volgende:

ecCryptRevoked Het certificaat is ingetrokken door de uitgever ervan. Wordt altijd geweigerd.
ecCryptRevocationOffline De responder kon niet worden bereikt. Wordt alleen geweigerd wanneer IgnoreRevocationOffline False is.
ecCryptNoRevocationCheck Het certificaat publiceert geen intrekkingsinformatie. Wordt alleen geweigerd wanneer IgnoreNoRevocationCheck False is.

Veilige standaardwaarden

Door TLSOptions.Preset op tlspSecureDefaults te zetten, wordt de controle ingeschakeld als scrcChainExcludeRoot, samen met de andere verscherpte standaardwaarden, en blijven de twee soft-fail-instellingen behouden, zodat het inschakelen ervan geen verbinding verbreekt die voorheen werkte. Een bereik dat u zelf hebt gekozen voordat u de preset toepaste, blijft ongewijzigd.


oClient.TLSOptions.Preset := tlspSecureDefaults;