TsgcWebSocketClient | SChannel Certificate Revocation

TLSOptions.VerifyCertificate özelliğinin True olarak ayarlanması, sunucu sertifika zincirinin güvenilir olduğunu ve bağlanılan ana bilgisayarı adlandırdığını ortaya koyar. Bu sertifikanın düzenlendiğinden bu yana iptal edilip edilmediği hakkında hiçbir şey söylemez.

Bu boşluk önemlidir: sertifikası iptal edilmiş ancak henüz süresi dolmamış çalınmış bir özel anahtar yine de başarıyla kimlik doğrulaması yapar ve iptal mekanizması tam olarak bu durumu karşılamak için vardır. İptal durumu yalnızca istendiğinde, TLSOptions.SChannel_Options.Revocation aracılığıyla denetlenir.


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

Durum, sertifika zinciri oluşturulurken alınır; bu da sertifikada 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: etkinleştirilmesi her yeni bağlantıya ağ trafiği ekler.

Check

Zincirin 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 sunucu sertifikası denetlenir. En ucuz seçenek, bağlantı başına tek bir sorgu.
scrcChainExcludeRoot Sunucu sertifikası ve ara sertifikalar denetlenir, kök denetlenmez. Alışılmış seçim budur, çünkü kendinden imzalı bir 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ı 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, bu nedenle hiçbir zaman 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 sertifikayı kabul et; bu, web tarayıcılarının kullandığı yumuşak hata (soft-fail) davranışıdır. Bunun yerine reddetmek için False olarak ayarlayın. Reddetmek daha katıdır, ancak her bağlantıyı yanıtlayıcının erişilebilir olmasına bağımlı kılar, dolayısıyla bir yanıtlayıcı kesintisi uygulamanızın kesintisine dönüşür.

IgnoreNoRevocationCheck

Sertifikanı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.

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

Bildirilen hatalar

Bağlantı reddedildiğinde, nedeni OnSChannelVerifyPeer olayına şunlardan biri olarak ulaşır:

ecCryptRevoked Sertifika, 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 Sertifika hiçbir iptal bilgisi yayımlamıyor. Yalnızca IgnoreNoRevocationCheck False olduğunda reddedilir.

Güvenli varsayılanlar

TLSOptions.Preset özelliğinin tlspSecureDefaults olarak ayarlanması, diğer sıkılaştırılmış varsayılanlarla birlikte denetimi scrcChainExcludeRoot olarak etkinleştirir ve iki yumuşak hata ayarını korur, böylece bunu açmak daha önce çalışan bir bağlantıyı bozmaz. Ön ayarı uygulamadan önce kendiniz seçtiğiniz bir kapsam olduğu gibi bırakılır.


oClient.TLSOptions.Preset := tlspSecureDefaults;