Server SSL | SChannel Client Certificate Revocation

SSLOptions.VerifyCertificate özelliğinin True olarak ayarlanması, sunucunun gelen her istemciden bir sertifika istemesini ve sunduğu zinciri doğrulamasını sağlar. Bu doğrulama, istemci zincirinin güvenilir olduğunu ortaya koyar. İstemci sertifikasının düzenlendiğinden bu yana iptal edilip edilmediği hakkında hiçbir şey söylemez.

Bu boşluk, sertifikanın kimlik bilgisi olduğu her yerde önemlidir: bir dizüstü bilgisayar kaybolur veya bir çalışan işten ayrılır, kendisine düzenlenmiş sertifika iptal edilir ve süresi dolduğu güne kadar sunucunuzda hâlâ bir oturum açabilir. İptal durumu yalnızca istendiğinde, SSLOptions.SChannel_Options.Revocation aracılığıyla sorgulanır.

İptal ayarları, bir istemci sertifikası doğrulanırken okunur; bu nedenle SSLOptions.VerifyCertificate True olmadıkça hiçbir şey yapmazlar, çünkü sunucunun en başta bir istemci sertifikası istemesini sağlayan da budur. Hiç sertifika sunmayan bir istemcinin reddedilmesi veya geçirilmesi ayrı bir karardır ve bu karar SSLOptions.VerifyCertificate_Options.FailIfNoCertificate tarafından verilir.


oServer.SSL := True;
oServer.SSLOptions.IOHandler := iohSChannel;
oServer.SSLOptions.VerifyCertificate := True;
oServer.SSLOptions.VerifyCertificate_Options.FailIfNoCertificate := True;
oServer.SSLOptions.SChannel_Options.Revocation.Check := scrcChainExcludeRoot;

Durum, sertifika zinciri oluşturulurken alınır; bu da istemci sertifikasında belirtilen CRL dağıtım noktasına veya OCSP yanıtlayıcısına handshake sırasında başvurulduğu anlamına gelir. Denetimin varsayılan olarak kapalı olmasının nedeni budur: sunucunun kabul ettiği her bağlantının yoluna bir dış istek yerleştirir.

Check

İstemci zincirinin ne kadarının iptal durumunun sorgulanacağını seçer.

scrcDisabled Varsayılan. Hiçbir iptal durumu alınmaz ve hiçbiri gerekli değildir.
scrcEndCertificate Yalnızca istemci sertifikasının kendisi denetlenir. En ucuz seçenek, bağlantı başına tek bir sorgu.
scrcChainExcludeRoot İstemci sertifikası ve onu düzenleyen ara sertifikalar denetlenir, kök denetlenmez. Alışılmış seçim budur, çünkü istemci sertifikalarınızı düzenleyen CA'nın kökü nadiren kendisi için bir CRL yayımlar.
scrcChain Kök dahil olmak üzere zincirin tamamı.

Timeout

URL başına değil, iptal bilgisinin tamamının alınması için izin verilen milisaniye cinsinden süre, böylece yanıt vermeyen bir yanıtlayıcı, sunucu kendisini beklerken handshake'i askıda bırakamaz. Varsayılan 5000. Sıfır değeri, önemli ölçüde daha uzun olabilen Windows varsayılanını yürürlükte bırakır.

CacheOnly

True olduğunda, yalnızca Windows'un zaten önbelleğe almış olduğu iptal verileri kullanılır ve handshake hiçbir zaman ağa gitmez, böylece gelen bir bağlantı hiçbir zaman bir yanıtlayıcı yüzünden gecikmez. Bu durumda boş bir önbellek durumu bilinmeyen bırakır ve buna IgnoreNoRevocationCheck karar verir. Varsayılan False.

IgnoreRevocationOffline

Yanıtlayıcıya ulaşılamadığında ne olacağına karar verir. Varsayılan True, yani istemci sertifikasını kabul et; bu, yumuşak hata (soft-fail) davranışıdır. Bunun yerine reddetmek için False olarak ayarlayın. Reddetmek daha katıdır, ancak her yeni bağlantıyı yanıtlayıcının sunucudan erişilebilir olmasına bağımlı kılar, dolayısıyla bir yanıtlayıcı kesintisi tüm istemcileriniz için bir kesintiye dönüşür.

IgnoreNoRevocationCheck

İstemci sertifikasının hiçbir CRL dağıtım noktası ve hiçbir OCSP yanıtlayıcısı yayımlamadığı, dolayısıyla durumunun hiç belirlenemediği durumda ne olacağına karar verir. Varsayılan True, yani kabul et. Dahili bir CA tarafından düzenlenen sertifikalar sıklıkla hiçbir iptal bilgisi taşımaz, bu nedenle bunu yalnızca bir istemciye verdiğiniz her sertifikanın böyle bir bilgi yayımladığını bildiğinizde False olarak ayarlayın.

Ignore özelliklerinin hiçbiri, iptal edildiği doğrulanmış olarak dönen bir sertifikayı asla kabul etmez. Bu sonuç her zaman reddedilir ve handshake başarısız olur.

Bildirilen durumlar

Zincir denetimi bir istemciyi reddettiğinde, nedeni şunlardan biridir:

ecCryptRevoked İstemci sertifikası, düzenleyicisi tarafından iptal edilmiştir. Her zaman reddedilir.
ecCryptRevocationOffline Yanıtlayıcıya ulaşılamadı. Yalnızca IgnoreRevocationOffline False olduğunda reddedilir.
ecCryptNoRevocationCheck İstemci sertifikası hiçbir iptal bilgisi yayımlamıyor. Yalnızca IgnoreNoRevocationCheck False olduğunda reddedilir.

Güvenli varsayılanlar

SSLOptions.Preset özelliğinin tlspSecureDefaults olarak ayarlanması, sunucuda denetimi scrcChainExcludeRoot olarak etkinleştirir; bu, aynı ön ayarın istemcide zaten uyguladığıyla örtüşür ve iki yumuşak hata ayarını korur, böylece daha önce kabul edilen bir istemci kabul edilmeye devam eder. Ön ayarı uygulamadan önce kendiniz seçtiğiniz bir kapsam olduğu gibi bırakılır.


oServer.SSLOptions.Preset := tlspSecureDefaults;

Notlar