Wenn Sie SSLOptions.VerifyCertificate auf True setzen, fordert der Server von jedem eingehenden Client ein Zertifikat an und validiert die vorgelegte Kette. Diese Validierung stellt sicher, dass der Kette des Clients vertraut wird. Darüber, ob das Client-Zertifikat seit seiner Ausstellung widerrufen wurde, sagt sie nichts aus.
Diese Lücke ist überall dort bedeutsam, wo das Zertifikat die Zugangsberechtigung ist: Ein Laptop geht verloren oder ein Mitarbeiter verlässt das Unternehmen, das ihm ausgestellte Zertifikat wird widerrufen, und bis zum Tag seines Ablaufs öffnet es weiterhin eine Sitzung auf Ihrem Server. Der Widerruf wird nur geprüft, wenn dies angefordert wird, über SSLOptions.SChannel_Options.Revocation.
Die Widerrufseinstellungen werden gelesen, während ein Client-Zertifikat validiert wird. Sie bewirken daher nichts, solange SSLOptions.VerifyCertificate nicht True ist, denn erst dadurch fordert der Server überhaupt ein Client-Zertifikat an. Ob ein Client, der gar kein Zertifikat vorlegt, abgewiesen oder durchgelassen wird, ist eine davon getrennte Entscheidung, die SSLOptions.VerifyCertificate_Options.FailIfNoCertificate trifft.
oServer.SSL := True;
oServer.SSLOptions.IOHandler := iohSChannel;
oServer.SSLOptions.VerifyCertificate := True;
oServer.SSLOptions.VerifyCertificate_Options.FailIfNoCertificate := True;
oServer.SSLOptions.SChannel_Options.Revocation.Check := scrcChainExcludeRoot;
Der Status wird abgerufen, während die Zertifikatskette aufgebaut wird. Das bedeutet, dass der vom Client-Zertifikat angegebene CRL-Verteilungspunkt oder OCSP-Responder während des Handshakes kontaktiert wird. Deshalb ist die Prüfung standardmäßig deaktiviert: Sie legt eine ausgehende Anfrage in den Weg jeder Verbindung, die der Server annimmt.
Legt fest, für welchen Teil der Kette des Clients der Widerrufsstatus abgefragt wird.
| scrcDisabled | Standard. Es wird kein Widerrufsstatus abgerufen und keiner benötigt. |
| scrcEndCertificate | Es wird nur das Client-Zertifikat selbst geprüft. Die günstigste Option, eine Abfrage pro Verbindung. |
| scrcChainExcludeRoot | Das Client-Zertifikat und die Zwischenzertifikate, die es ausgestellt haben, werden geprüft, das Stammzertifikat nicht. Die übliche Wahl, da das Stammzertifikat der CA, die Ihre Client-Zertifikate ausstellt, nur selten eine CRL für sich selbst veröffentlicht. |
| scrcChain | Die gesamte Kette einschließlich des Stammzertifikats. |
Millisekunden, die für den gesamten Abruf der Widerrufsinformationen zur Verfügung stehen, nicht pro URL, sodass ein Responder, der nicht antwortet, den Handshake nicht blockieren kann, während der Server auf ihn wartet. Standard 5000. Der Wert null belässt den Windows-Standardwert in Kraft, der erheblich länger sein kann.
Bei True werden nur Widerrufsdaten verwendet, die Windows bereits zwischengespeichert hat, und der Handshake greift nie auf das Netzwerk zu, sodass eine eingehende Verbindung nie durch einen Responder verzögert wird. Bei einem leeren Cache bleibt der Status dann unbekannt, worüber IgnoreNoRevocationCheck entscheidet. Standard False.
Entscheidet, was geschieht, wenn der Responder nicht erreicht werden konnte. Standard True, das Client-Zertifikat wird akzeptiert, was dem Soft-Fail-Verhalten entspricht. Setzen Sie die Eigenschaft auf False, um es stattdessen abzulehnen. Die Ablehnung ist strenger, macht aber jede neue Verbindung davon abhängig, dass der Responder vom Server aus erreichbar ist, sodass ein Ausfall des Responders zu einem Ausfall für alle Ihre Clients wird.
Entscheidet, was geschieht, wenn das Client-Zertifikat überhaupt keinen CRL-Verteilungspunkt und keinen OCSP-Responder veröffentlicht, sodass sein Status nicht ermittelt werden kann. Standard True, es wird akzeptiert. Von einer internen CA ausgestellte Zertifikate enthalten häufig keine Widerrufsinformationen. Setzen Sie diese Eigenschaft daher erst dann auf False, wenn Sie wissen, dass jedes Zertifikat, das Sie an einen Client ausgeben, solche Informationen veröffentlicht.
Keine der beiden Ignore-Eigenschaften akzeptiert jemals ein Zertifikat, das als bestätigt widerrufen zurückgemeldet wurde. Dieses Ergebnis wird immer abgelehnt und der Handshake schlägt fehl.
Wenn die Kettenprüfung einen Client ablehnt, lautet der Grund einer der folgenden:
| ecCryptRevoked | Das Client-Zertifikat wurde von seinem Aussteller widerrufen. Wird immer abgelehnt. |
| ecCryptRevocationOffline | Der Responder konnte nicht erreicht werden. Wird nur abgelehnt, wenn IgnoreRevocationOffline False ist. |
| ecCryptNoRevocationCheck | Das Client-Zertifikat veröffentlicht keine Widerrufsinformationen. Wird nur abgelehnt, wenn IgnoreNoRevocationCheck False ist. |
Das Setzen von SSLOptions.Preset auf tlspSecureDefaults aktiviert die Prüfung auf dem Server als scrcChainExcludeRoot, passend zu dem, was dasselbe Preset auf dem Client bereits angewendet hat, und behält die beiden Soft-Fail-Einstellungen bei, sodass ein Client, der zuvor zugelassen wurde, weiterhin zugelassen wird. Ein Umfang, den Sie vor dem Anwenden des Presets selbst gewählt haben, bleibt unverändert.
oServer.SSLOptions.Preset := tlspSecureDefaults;