Server SSL | Intrekking van clientcertificaten in SChannel

Door SSLOptions.VerifyCertificate op True te zetten, vraagt de server aan elke binnenkomende client een certificaat en valideert hij de keten die deze presenteert. Die validatie stelt vast dat de clientketen wordt vertrouwd. Het zegt niets over de vraag of het clientcertificaat sinds de uitgifte is ingetrokken.

Dat verschil is belangrijk overal waar het certificaat het toegangsbewijs is: een laptop raakt zoek of een medewerker vertrekt, het aan hem uitgegeven certificaat wordt ingetrokken, en tot de dag waarop het verloopt opent het nog steeds een sessie op uw server. De intrekkingsstatus wordt alleen opgezocht wanneer daarom wordt gevraagd, via SSLOptions.SChannel_Options.Revocation.

De intrekkingsinstellingen worden gelezen terwijl een clientcertificaat wordt gevalideerd, dus ze doen niets tenzij SSLOptions.VerifyCertificate True is, want dat is wat de server er in de eerste plaats toe brengt om een clientcertificaat op te vragen. Of een client die helemaal geen certificaat presenteert wordt geweigerd of doorgelaten, is een aparte beslissing, genomen door SSLOptions.VerifyCertificate_Options.FailIfNoCertificate.


oServer.SSL := True;
oServer.SSLOptions.IOHandler := iohSChannel;
oServer.SSLOptions.VerifyCertificate := True;
oServer.SSLOptions.VerifyCertificate_Options.FailIfNoCertificate := True;
oServer.SSLOptions.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 clientcertificaat wordt genoemd, tijdens de handshake wordt benaderd. Daarom staat de controle standaard uit: er komt daardoor een uitgaand verzoek in het pad van elke verbinding die de server accepteert.

Check

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

scrcDisabled Standaard. Er wordt geen intrekkingsstatus opgehaald en die is ook niet vereist.
scrcEndCertificate Alleen het clientcertificaat zelf wordt gecontroleerd. De goedkoopste optie, één opzoeking per verbinding.
scrcChainExcludeRoot Het clientcertificaat en de tussenliggende certificaten die het hebben uitgegeven worden gecontroleerd, het rootcertificaat niet. Dit is de gebruikelijke keuze, omdat het rootcertificaat van de CA die uw clientcertificaten uitgeeft 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 terwijl de server erop wacht. 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 een binnenkomende verbinding nooit door een responder 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 clientcertificaat wordt geaccepteerd, wat het soft-fail-gedrag is. Zet dit op False om het in plaats daarvan te weigeren. Weigeren is strenger, maar daardoor is elke nieuwe verbinding afhankelijk van de bereikbaarheid van de responder vanaf de server, waardoor een storing van de responder een storing voor al uw clients wordt.

IgnoreNoRevocationCheck

Bepaalt wat er gebeurt wanneer het clientcertificaat helemaal geen CRL-distributiepunt en geen OCSP-responder publiceert, zodat de status ervan niet kan worden vastgesteld. Standaard True, het wordt geaccepteerd. Certificaten die door een interne CA zijn uitgegeven bevatten vaak geen intrekkingsinformatie, dus zet dit pas op False wanneer u weet dat elk certificaat dat u aan een client verstrekt er een publiceert.

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

Gerapporteerde statussen

Wanneer de ketencontrole een client weigert, is de reden een van de volgende:

ecCryptRevoked Het clientcertificaat 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 clientcertificaat publiceert geen intrekkingsinformatie. Wordt alleen geweigerd wanneer IgnoreNoRevocationCheck False is.

Veilige standaardwaarden

Door SSLOptions.Preset op tlspSecureDefaults te zetten, wordt de controle op de server ingeschakeld als scrcChainExcludeRoot, overeenkomstig wat dezelfde preset al op de client toepaste, en blijven de twee soft-fail-instellingen behouden, zodat een client die voorheen werd toegelaten nog steeds wordt toegelaten. Een bereik dat u zelf hebt gekozen voordat u de preset toepaste, blijft ongewijzigd.


oServer.SSLOptions.Preset := tlspSecureDefaults;

Opmerkingen