Windows Server 2012 ve IIS 8.0 üzerinde 403.16 veya 403.7 alabilirsiniz

Merhaba,

Windows Server 2012 ile gelen IIS 8.0 sürümünde “Client Certificate Authentication” kullanıyorsanız, işler IIS 7.5 ‘dakinden biraz daha farklı yürümekte. Biliyoruz ki IIS, “Client Certificate Authentication” esnasında , istemci tarafına kendi güvendiği “Certificate Authority” lerin yeraldığı bir CTL (Certificate Trust List) gönderiyor. Bu sayede sunucu üzerinde kendi güvendiğiniz Sertifika sağlayıcıları sınırlandırabiliyoruz.

Bağlantıda ki makalede belirttiği gibi IIS 8.0 üzerinde; eğer "Schannel" modülü, “TLS/SSL handshake” esnasında “Trusted Issuer list” gönderimi yapıyorsa 403.7, yapmıyorsa 403.16 alabiliriz. Bu konfigürasyon "Schannel" kayıt defteri ayarları altında aşağıdaki değişken ile kontrol ediliyor:

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

Value name: SendTrustedIssuerList
Value type: REG_DWORD
Value data: 0 (False)

IIS 8.0 sürümü için “SendTrustedIssuerList” parametresinin varsayılan değeri “0” dır. Yani muhtemelen varsayılan konfigürasyonda 403.16 alıyor olabilirsiniz. Şimdi gelelim bunun sebebine: 

Windows 2012 server için, artık “Client Certificate Policy” akışı registry deki “ClientAuthTrustMode” parametresinin değerine göre farklı çalışıyor. Windows Server 2012 ve Windows 8 işletim sistemlerinde, güvenlik iyileştirmesi olarak, “Trusted Root Certification Authorities” store’unda bulunan sertifikalar icin self-signed olmasi zorunlulugu getirildi. Nitekim “Root Certificate Authority” sertifikasının self signed olmasi doğası gereği zorunlu. Windows Server 2008 R2 ve Windows 7 işletim sistemlerinde böyle bir zorunluluk yoktu.

Bu nokta’da self-signed olmayanlari “certificate store”dan cikarabilirsiniz ya da asagidaki “ClientAuthTrustMode” registry ayarini “2” ye ayarlayarak davranışı önceki IIS sürümleri ile benzer hale getirebilirsiniz:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL]

"ClientAuthTrustMode"=dword:00000002

 Bu registry değerinin alabildiği 3 farklı değer var ve default olarak degeri “0”.

0 : Machine Trust

1 : Exclusive Root Trust

2 : ExclusiveCATrust

Machine Trust ve Exclusive Root Trust degerleri icin “schannel” modülü client ve server tarafindaki sertifikalarda “Trusted Root Cert.s” altında self-signed olmayan sertifika ile karşılaşırsa hata veriyor. Bu değer ExclusiveCATrust olarak ayarlanmış ise Sertifika zinciri düzgün oldugu surece sorun oluşmuyor.

Teşekkürler,

İyi çalışmalar,

Mert Öztürk