Použití KDC Proxy Service pro Kerberos ověřování přes HTTPS
Použití KDC Proxy Service pro Kerberos ověřování přes HTTPS
Kerberos je standardem pro autentizaci v Active Directory. V prostředích s VPN, split-tunnel VPN nebo v extranetových scénářích ale často není možné spolehlivě otevřít přímou komunikaci klientů na doménové řadiče přes porty 88 a 464.
Řešením je KDC Proxy Service (KPSSVC), která umožňuje proxyovat Kerberos přes HTTPS na portu 443. V tomto návodu si ukážeme, jak službu správně nastavit, jak nakonfigurovat klienty a jak ověřit, že opravdu používají KDC proxy a ne přímý přístup na doménový řadič.
1. Příprava certifikátu pro KDC Proxy
Než začneme, musíme připravit certifikát pro HTTPS endpoint KDC proxy.
📌 Požadavky na certifikát:
- Použít šablonu Web Server nebo vlastní šablonu založenou na Web Server.
- EKU (Extended Key Usage) obsahující Server Authentication (1.3.6.1.5.5.7.3.1).
- Subject Alternative Name (SAN) obsahuje FQDN serveru (např.
kps.example.com). - Certifikát obsahuje privátní klíč.
- Certifikát uložen v LocalMachine\My store.
- Certifikační řetězec je důvěryhodný pro klienty.
- Klienti mimo firemní síť se dostanou na CRL/OCSP endpointy certifikátu. Pokud revocation check neprojde, klient KDC proxy standardně odmítne.
Certifikát vystavíme přes interní CA nebo jinou důvěryhodnou certifikační autoritu.
📌 Pro internetové scénáře používejme FQDN, nikoliv IP adresu. Klienti se musí připojovat jménem, které odpovídá certifikátu.
2. Instalace a konfigurace KDC Proxy na serveru
2.1 Předpoklady
Než začneme s konfigurací, ujistíme se, že:
- Používáme Windows Server 2012 nebo novější.
- Server je připojený do domény nebo má spolehlivý interní přístup k doménovým řadičům.
- Server umí interně komunikovat s doménovými řadiči na Kerberos portech
88a464. - Máme platný Server Authentication certifikát.
- Port 443/TCP je otevřen z klientů na KDC proxy server.
- Port
443nepoužívá jiná služba, která by kolidovala s HTTP.sys bindingem.
2.2 Nastavení URL ACL a SSL bindingu
Na serveru spustíme PowerShell jako administrátor a provedeme:
$KpsFqdn = "kps.example.com"
$KpsPort = 443
$Cert = Get-ChildItem Cert:\LocalMachine\My | Where-Object {
$_.DnsNameList.Unicode -contains $KpsFqdn
} | Select-Object -First 1
$Guid = [Guid]::NewGuid()
if (-not $Cert) {
throw "Certifikát pro $KpsFqdn nebyl nalezen v LocalMachine\My."
}
# Rezervace URL pro HTTP.sys
cmd /c ('netsh http add urlacl url=https://+:{0}/KdcProxy user="NT AUTHORITY\Network Service"' -f $KpsPort)
# Připojení certifikátu na 443/TCP
Add-NetIPHttpsCertBinding -IPPort "0.0.0.0:$KpsPort" -CertificateHash $Cert.Thumbprint -CertificateStoreName My -ApplicationId "{$Guid}" -NullEncryption $false
2.3 Nastavení registru pro KDC Proxy
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\KPSSVC\Settings -Name HttpsClientAuth -Type DWord -Value 0 -Force
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\KPSSVC\Settings -Name DisallowUnprotectedPasswordAuth -Type DWord -Value 0 -Force
Tyto hodnoty odpovídají běžnému password-based Kerberos over HTTPS scénáři pro standardní klienty.
📌 Pokud z nějakého důvodu nepoužíváme výchozí port 443, musíme tomu přizpůsobit i SSL binding a klientské mapování v GPO/Intune.
2.4 Spuštění služby a otevření portu
Set-Service -Name KPSSVC -StartupType Automatic
Start-Service -Name KPSSVC
New-NetFirewallRule -DisplayName "Allow KDCProxy TCP $KpsPort" -Direction Inbound -Protocol TCP -LocalPort $KpsPort -Action Allow
3. Nastavení klientů
3.1 Pomocí Group Policy
- Otevřeme Group Policy Management Console (GPMC.msc).
- Vytvoříme novou Group Policy Object (GPO) např.
KDC Proxy Settings. - Přejdeme na:
Computer Configuration > Administrative Templates > System > Kerberos - Otevřeme nastavení Specify KDC proxy servers for Kerberos clients.
- Nastavíme politiku na Enabled a klikneme na Show…
- V dialogu zadáme mapování:
Value Name: example.com
Value: <https kps.example.com:443:kdcproxy />
Value Name odpovídá internímu DNS suffixu domény nebo realm, pro který má klient proxy použít.
📌 Pokud máme více proxy serverů pro stejnou doménu, oddělíme je ve stejné hodnotě mezerou:
Value Name: example.com
Value: <https kps1.example.com:443:kdcproxy kps2.example.com:443:kdcproxy />
📌 Pokud máme více interních doménových suffixů, vytvoříme samostatný řádek pro každý suffix.
- Po aplikaci GPO doporučujeme klienty restartovat nebo spustit
gpupdate /force.
3.2 Lokálně pomocí registrů (pro troubleshooting)
Pokud potřebujeme KDC proxy otestovat na jednom klientovi bez GPO a Intune, můžeme stejné mapování nastavit lokálně v registru.
Nejprve povolíme samotnou politiku:
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos" /v KdcProxyServer_Enabled /t REG_DWORD /d 1 /f
Potom vytvoříme mapování interního DNS suffixu domény na externí KDC proxy URL:
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos\KdcProxy\ProxyServers" /v example.com /t REG_SZ /d "<https kps.example.com:443:kdcproxy />" /f
Toto nastavení odpovídá stejnému mapování jako v GPO:
example.com -> <https kps.example.com:443:kdcproxy />
📌 Tuto variantu berme hlavně jako nouzové lokální nastavení pro testování a troubleshooting.
📌 Po změně registru doporučujeme klient restartovat a před dalším testem provést klist purge.
Pro čistě diagnostické účely můžeme dočasně vypnout kontrolu revokace TLS certifikátu KDC proxy:
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos\Parameters" /v NoRevocationCheck /t REG_DWORD /d 1 /f
⚠ Toto nastavení používejme jen pro troubleshooting. V produkčním provozu má být revocation check zapnutý.
3.3 Pomocí Intune (Microsoft Endpoint Manager)
Pokud spravujeme klienty pomocí Intune, nejpraktičtější je dnes použít Settings catalog, protože Microsoft do něj promítá i Windows Administrative Templates (ADMX) nastavení a není nutné ručně skládat OMA-URI payload.
📌 Doporučený postup:
- V Intune otevřeme
Devices > Configuration > Create > New policy. - Zvolíme:
- Platform:
Windows 10 and later - Profile type:
Settings catalog
- Platform:
- V části Add settings vyhledáme:
Specify KDC proxy servers for Kerberos clients - Přidáme toto nastavení a nakonfigurujeme stejné mapování jako v GPO:
Value Name: example.com
Value: <https kps.example.com:443:kdcproxy />
📌 Pokud spravujeme více doménových suffixů, přidáme samostatnou položku pro každý suffix.
📌 Politiku doporučujeme přiřazovat na device groups, protože jde o Computer Configuration nastavení.
Pokud ve vaší tenant verzi nebo v konkrétním prostředí tento setting v Settings catalog nevidíte, použijeme fallback přes Custom profil s ADMX-backed policy:
- OMA-URI:
./Device/Vendor/MSFT/Policy/Config/ADMX_Kerberos/KdcProxyServer - Data type:
String (XML file)
V takovém případě ale musí být hodnota zadaná jako SyncML / XML-encoded ADMX-backed payload podle aktuální Microsoft dokumentace. Proto je v běžné praxi bezpečnější a jednodušší použít nejdřív Settings catalog a teprve až jako nouzové řešení sahat po custom OMA-URI profilu.
📌 Pro troubleshooting lze klientům dočasně nasadit i politiku Disable revocation checking for the SSL certificate of KDC proxy servers, ale Microsoft ji doporučuje jen pro diagnostiku, ne pro produkční provoz.
4. Troubleshooting
4.1 Ověření dostupnosti KPSSVC
Get-Service KPSSVC
Služba musí běžet (Status: Running).
4.2 Kontrola URL ACL, SSL bindingu a otevřeného portu
netsh http show urlacl | findstr /i KdcProxy
Get-NetIPHttpsCertBinding -IPPort "0.0.0.0:443"
netstat -ano | findstr :443
4.3 Kontrola SSL certifikátu
Ověříme, že certifikát obsahuje:
- Server Authentication v EKU
- Správný FQDN v SAN
- Platný privátní klíč
- Pro externí klienty dostupný CRL/OCSP endpoint
4.4 Event Logy
Chyby najdeme v:
- serverových logách KdcProxy
- klientském logu Applications and Services Logs > Microsoft > Windows > Security-Kerberos > Operational
4.5 Reálný test použití KDC proxy
Na klientovi test provádíme mimo firemní síť, kde:
- je dostupný
kps.example.com:443 - není dostupný přímý Kerberos na doménový řadič přes
88/464
Pomocné testy mohou vypadat například takto:
Test-NetConnection kps.example.com -Port 443
Test-NetConnection dc1.example.com -Port 88
Test-NetConnection dc1.example.com -Port 464
klist purge
Teprve potom provedeme přístup k doménovému prostředku nebo vyžádání Kerberos ticketu a ověříme v klientských a serverových logách, že požadavek skutečně prošel přes KDC proxy.
📌 Samotné klist get krbtgt nestačí jako důkaz použití proxy. Pokud je klient stále schopný dosáhnout přímo na doménový řadič, Kerberos může fungovat i bez KDC proxy.
5. Shrnutí
✅ KDC Proxy umožňuje bezpečné Kerberos ověřování přes HTTPS.
✅ Nepožaduje instalaci IIS, KPSSVC běží nativně v systému.
✅ Vyžaduje platný Server Authentication certifikát.
✅ Klienty je nutné mapovat podle interního DNS suffixu domény na externí KDC proxy URL.
✅ V Intune používáme ADMX-backed politiku KdcProxyServer, nikoliv vlastní nezdokumentovaný XML payload.
✅ Správné ověření musí proběhnout mimo firemní síť a s kontrolou logů, ne jen pomocí klist.