Tanúsítványok használata Windows IIS szerveren az Azure Key Vaultból
Ez az útmutató bemutatja, hogyan lehet az Azure Key Vaultban tárolt tanúsítványokat használni a Windows Serveren futó IIS webszerverhez.
Az Azure Key Vault közvetlenül összekapcsolható a DigiCerttel, így a tanúsítványkezelés automatizálható.
A leírás két forgatókönyvet fed le: az Azure-beli virtuális gépekre és a helyszíni, vállalati környezetben működő szerverekre vonatkozót.
Ez az útmutató feltételezi, hogy tanúsítványunk van az Azure Key Vaultban. Hogyan kerüljön oda közvetlen kapcsolaton keresztül a CA DigiCerttel, megtalálható az útmutatóban: Azure Key Vault csatlakoztatása a CA DigiCerttel.
Ezután két lehetőség van a TLS tanúsítvány telepítésére a szerverre:
- telepíteni a tanúsítványt a szerverre (VM) az Azure-ban
- vagy a helyi helyszíni Windows szerverre (a cégén belül)
Ez az útmutató mindkét forgatókönyvet lefedi, ahol az első biztonságosabb (a tanúsítvány nem kerül exportálásra az Azure Key Vaultból, és nem tárolódik lokálisan).
Azure VM-en történő telepítési lehetőség
Ha van virtuális Windows szerver (VM) közvetlenül az Azure-ban, használja ezt a lehetőséget. Telepítse az Azure PowerShellt és az Az PowerShell modult.
Automatikus tanúsítványszinkronizálás az Azure Key Vaultból az Azure VM-be
Az Azure VM Managed Identity bekapcsolása
Az Azure Portálon nyissa meg a VM > Identity > System assigned beállítást, majd kapcsolja be. Lépjen az Azure Key Vault > Access Policies részre és adjon hozzá jogosultságokat a VM-hez:
- Get, List a Secret permissions részre
- Get, List a Certificate permissions részre
Azure Key Vault VM Extension telepítése
Hozza létre az első lépésben a konfigurációs fájlt, amelyet lokálisan tárolnak a szerveren. Adja meg benne a Secrets elérhetőségét a Vaultban, nemcsak a tanúsítványt (ilyen útvonal csak a nyilvános kulcshoz vezet).
{
"secretsManagementSettings": {
"pollingIntervalInS": "60",
"certificateStoreName": "MY",
"certificateStoreLocation": "LocalMachine",
"observedCertificates": [
{
"url": "https://cc-iis-test.vault.azure.net/secrets/zoner-test-azure",
"certificateStoreName": "MY",
"certificateStoreLocation": "LocalMachine"
}
]
}
}
Aztán telepítse és indítsa el a VM kiterjesztést (PowerShell). A beállításokat töltse be a lokálisan tárolt JSON fájlból. A VM és a Resource Group nevét mentheti változóként, és használhatja azokat vagy konkrét neveket.
az vm extension set --resource-group "RG-name" --vm-name "vmname" --name "KeyVaultForWindows" --publisher "Microsoft.Azure.KeyVault" --version 3.3 --settings ".\settings.json"
A parancs futtatása után a program egy ideig dolgozik a PS-ben, és siker esetén hosszú JSON jelentést kap az extensio állapotáról. Ezután a tanúsítvány megjelenik a Windows certificate store-ban a Local Computer -> Personal -> Certificates helyen. Az a tény, hogy a Local Computer alatt van, azt jelenti, hogy minden alkalmazás, beleértve az IIS-t is, látja. A szinkronizálás eltarthat egy ideig, attól függően, hogy az "pollingIntervalInS" paraméterben hány másodpercet adott meg.
A tanúsítvány szinkronizálásának ellenőrzése
A telepítés után ellenőrizze, hogy a tanúsítvány letöltötte-e a Windows Certificate Store-ba:
PowerShell
certlm.msc
A tanúsítványnak a Personal > Certificates szekcióban kell lennie.
A tanúsítvány automatikus hozzárendelése IIS-hez
Először listázza ki a Local Machine Store-ban elérhető tanúsítványokat:
Get-ChildItem -Path Cert:\LocalMachine\My
Ezután válassza ki a megfelelő tanúsítványt az ujjlenyomat alapján, és mentse el a $cert változóba:
$certThumbprint = "VÁLASZTOTT_TANÚSÍTVÁNY_THUMBPRINTJE"
$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq $certThumbprint }
Új Bindingot kell létrehozni a domain névhez (a "Default Web Site" helyett használhatja az IIS-ben lévő nevét). Állítsa be a Bindingot egy adott domain névre a 443 porton (HTTPS):
Import-Module WebAdministration
New-WebBinding -Name "Default Web Site" -IPAddress "*" -Port 443 -HostHeader "zoner-test-azure.eu" -Protocol https
Binding létrehozása SNI-hez:
Import-Module WebAdministration
New-WebBinding -Name "Default Web Site" -Protocol https -Port 443 -HostHeader "zoner-test-azure.eu"
Most rendelje hozzá a kiválasztott tanúsítványt a Bindinghoz netsh használatával. A tanúsítvány ujjlenyomata már ismert a Storage-ban, még egy appid lesz szükséges, amelyet így tudhat meg:
[guid]::NewGuid()
$certThumbprint = "VÁLASZTOTT_TANÚSÍTVÁNY_THUMBPRINTJE"
$port = 443
$appid = "{00112233-4455-6677-8899-AABBCCDDEEFF}" # Cserélje ki saját alkalmazásának GUID-jával
$certStoreName = "MY" # 'MY' = 'Personal' a Windows cert store-ban
$cert = Get-ChildItem -Path Cert:\LocalMachine\My |
Where-Object { $_.Thumbprint -replace '\s','' -ieq $certThumbprint }
if (-not $cert) {
Write-Host "❌ A tanúsítvány $certThumbprint ujjlenyomattal nem található a LocalMachine\My-ban." -ForegroundColor Red
return
}
if (-not $cert.HasPrivateKey) {
Write-Host "❌ A tanúsítvány nem tartalmaz privát kulcsot, nem használható SSL-hez." -ForegroundColor Red
return
}
# === Esetleges meglévő binding eltávolítása ===
Write-Host "? Ősrégi SSL binding törlése 0.0.0.0:$port-on (ha van)..."
netsh http delete sslcert ipport=0.0.0.0:$port | Out-Null
# === Új binding hozzáadása netsh használatával ===
Write-Host "? Új SSL tanúsítvány hozzáadása 0.0.0.0:$port-hoz..."
netsh http add sslcert `
ipport=0.0.0.0:$port `
certhash=$($cert.Thumbprint) `
appid=$appid `
certstorename=$certStoreName | Out-Null
Write-Host "✅ A tanúsítvány sikeresen hozzárendelve 0.0.0.0:$port-ra netsh segítségével." -ForegroundColor Green
Végül hajtsa végre az IIS újratöltését:
iisreset
Annak ellenőrzése, hogy a tanúsítvány hozzá van rendelve a megfelelő bindinghoz manuálisan IIS-ben, vagy ezzel a szkripttel:
$bindings = Get-WebBinding | Where-Object {$_.protocol -eq "https"}
foreach ($binding in $bindings) {
$bindingDetails = $binding | Select-Object -Property protocol, bindingInformation
$parts = $bindingDetails.bindingInformation.Split(":")
$ip = $parts[0]
$port = $parts[1]
if ($ip -eq "*") {
$ip = "0.0.0.0"
}
try {
$sslCertOutput = netsh http show sslcert ipport=${ip}:${port}
# Extract required lines
$certHash = ($sslCertOutput | Select-String "Certificate Hash").Line.Split(":")[1].Trim()
$storeName = ($sslCertOutput | Select-String "Certificate Store Name").Line.Split(":")[1].Trim()
Write-Host "`n? SSL Binding: ${ip}:${port}" -ForegroundColor Cyan
Write-Host " Certificate Hash : $certHash"
Write-Host " Store : $storeName"
# Search for certificate in LocalMachine\
$cert = Get-ChildItem -Path "Cert:\LocalMachine\$storeName" | Where-Object {
$_.Thumbprint -replace '\s','' -ieq $certHash
}
if ($cert) {
Write-Host " CN (Subject) : $($cert.Subject)"
Write-Host " Érvényesség : $($cert.NotBefore.ToShortDateString()) – $($cert.NotAfter.ToShortDateString())"
} else {
Write-Host " ⚠️ A megadott ujjlenyomatos tanúsítvány nem található a Windows tanúsítványtárolójában."
}
} catch {
Write-Host "❌ A ${ip}:${port} tanúsítvány nem tölthető be – $($_.Exception.Message)"
}
Write-Host "`n---`n"
}
Javaslom, hogy ellenőrizze a konfigurációt, hogy ne legyenek felesleges Bindingok.
Automatikus megújítás
Az Azure Key Vault VM Extension biztosítja, hogy a tanúsítvány a Key Vault változása esetén automatikusan frissül. Az IIS újraindul a tanúsítvány változásakor, és mindig a legújabb verziót használja.
Telepítési lehetőség helyszíni szerveren
Ha saját virtuális gépen vagy fizikai gépen van Windows szerver, az Azure Key Vault VM Extension nem használható, és az importálás más módon szükséges.
Automatikus tanúsítványszinkronizálás az Azure Key Vaultból a helyszíni IIS-ig
Azure AD alkalmazás létrehozása a Key Vault eléréséhez
Az Azure Portálon lépjen az Azure Active Directory > App registrations részre, és hozzon létre egy új alkalmazást. Az alkalmazás regisztrációja után másolja ki az Application (client) ID -t és az Directory (tenant) ID -t.
A Certificates & secrets részben generáljon új client secret-et, és mentse el.
Az alkalmazás jogosultságainak hozzárendelése az Azure Key Vaultban
- Nyissa meg az Azure Key Vault > Access Policies oldalt.
- Adjon hozzá jogosultságokat az alkalmazáshoz:
- Get, List a Secret permissions részhez
- Get, List a Certificate permissions részhez
A Client Secret-et az alkalmazás létrehozásához és hozzárendeléséhez szükséges.
Tanúsítvány letöltése az Azure Key Vaultból a helyszíni szerverre
PowerShell
$tenantId = "TENANT_ID"
$clientId = "CLIENT_ID"
$clientSecret = "CLIENT_SECRET"
$vaultName = "AZ_EN-VOLTVAULT-NEVE"
$certName = "AZ_EN-TANÚSÍTVÁNY-NEVE"
$outputPath = "C:\certscert.pfx"
# Bejelentkezés az Azure AD-hez
$body = @{grant_type="client_credentials"; client_id=$clientId; client_secret=$clientSecret; resource="https://vault.azure.net" }
$tokenResponse = Invoke-RestMethod -Method Post -Uri "https://login.microsoftonline.com/$tenantId/oauth2/token" -Body $body
$token = $tokenResponse.access_token
# Tanúsítvány lekérdezése
$headers = @{ Authorization = "Bearer $token" }
$apiVersion = "7.5"
$secret = Invoke-RestMethod -Uri "https://$vaultName.vault.azure.net/secrets/${certName}?api-version=$apiVersion" -Headers $headers
$pfxBytes = [Convert]::FromBase64String($secret.value)
[System.IO.File]::WriteAllBytes($outputPath, $pfxBytes)
Tanúsítvány importálása a Windows Certificate Store-ba
PowerShell
$password = ConvertTo-SecureString -String "AZ_EN-JELSZÓM" -Force -AsPlainText
Import-PfxCertificate -FilePath $outputPath -CertStoreLocation Cert:LocalMachineMy -Password $password
Tanúsítvány hozzárendelése az IIS-hez
PowerShell
$cert = Get-ChildItem -Path Cert:LocalMachineMy | Sort-Object NotAfter -Descending | Select-Object -First 1
$thumbprint = $cert.Thumbprint
New-WebBinding -Name "Default Web Site" -IPAddress "*" -Port 443 -Protocol https
$cmd = "netsh http add sslcert ipport=0.0.0.0:443 certhash=$thumbprint appid='{4dc3e181-e14b-4a21-b022-59fc669b0914}'"
Invoke-Expression $cmd
iisreset
Automatikus megújítás
Ütemezze be ezt a szkriptet Scheduled Task-ként (például naponta) a Task Schedulerben, hogy a tanúsítvány automatikusan frissüljön az Azure Key Vault változásakor.
Automatikus átirányítás engedélyezése HTTP → HTTPS az IIS-ben
Használja a következő PowerShell szkriptet az összes HTTP kérés automatikus átirányításához HTTPS-re.
PowerShell
Import-Module WebAdministration
# Átirányítás engedélyezése az IIS-ben
Set-WebConfigurationProperty -Filter "/system.webServer/httpRedirect" -Name "enabled" -Value "True" -PSPath "IIS:SitesDefault Web Site"
Set-WebConfigurationProperty -Filter "/system.webServer/httpRedirect" -Name "destination" -Value "https://localhost" -PSPath "IIS:SitesDefault Web Site"
Set-WebConfigurationProperty -Filter "/system.webServer/httpRedirect" -Name "exactDestination" -Value "True" -PSPath "IIS:SitesDefault Web Site"
Set-WebConfigurationProperty -Filter "/system.webServer/httpRedirect" -Name "httpResponseStatus" -Value "Permanent" -PSPath "IIS:SitesDefault Web Site"
# IIS újraindítása
iisreset
Az egész folyamat automatizálása
Ha használja az Azure Key Vault VM Extensiont, és a Key Vault csatlakoztatva van a DigiCerthez, akkor a tanúsítvány automatikusan megújul és szinkronizálódik a Windows Certificate Store-ba. Azonban meg kell oldania a tanúsítvány hozzárendelését az IIS-ben, mert ez önmagában nem történik meg. Szükséges néhány további lépés, hogy a változás esetén a tanúsítvány automatikusan hozzárendelődjen az IIS-hez.
Az alábbiakban található egy szkript, amely automatikusan felismeri a tanúsítvány változását, és elvégzi a szükséges változtatásokat az IIS-ben. Biztosítja a tanúsítvány automatikus frissítését az IIS webszerveren. A tanúsítványok automatikusan frissülnek a Certificate Store-ban az Azure Key Vaultból. A szkript rendszeresen ellenőrzi, hogy egy új tanúsítványt importáltak-e a LocalMachine\My store-ba, és szükséges-e ezt a tanúsítványt hozzárendelni a bindinghoz az IIS-ben.
Az automatizálás beállítása Scheduled Task és PowerShell szkriptek segítségével
Először készítsünk elő egy PowerShell szkriptet, amely elvégzi a szükséges műveleteket, mint például a tanúsítvány beszerzése és az IIS binding frissítése. PowerShell szkript az automatikus tanúsítványcsatlakoztatáshoz az IIS bindinghoz:
Import-Module WebAdministration
# A ma kiadott tanúsítványok megszerzése
$certificates = Get-ChildItem -Path Cert:\LocalMachine\My
$today = (Get-Date).Date
$todayCerts = $certificates | Where-Object { $_.NotBefore.Date -eq $today }
$appid = "{fbb8250d-a9d7-4d41-b7bc-e75b77578802}"
if ($todayCerts.Count -gt 0) {
# Tanúsítványokat a kiadási dátum szerint rendezzük (a legújabb tanúsítvány lesz az első)
$latestCert = $todayCerts | Sort-Object NotBefore -Descending | Select-Object -First 1
# A legfrissebb tanúsítvány ujjlenyomatának megszerzése
$certThumbprint = $latestCert.Thumbprint
Write-Output "Új tanúsítvány (ma kiadott): $certThumbprint"
# Port a HTTPS-hez
$bindingPort = 443
$hostHeader = "zoner-test-azure.eu"
# Tanúsítvány megszerzése ujjlenyomat alapján
$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq $certThumbprint }
if ($cert -and $cert.HasPrivateKey) {
# IIS binding megszerzése adott porthoz és host headerhez
$binding = Get-WebBinding | Where-Object { $_.bindingInformation -like "*:$($bindingPort):$hostHeader" }
# Ha van binding, eltávolítjuk a régit
if ($binding) {
# A binding eltávolításához a Remove-WebBinding-et használjuk
Remove-WebBinding -Name "Default Web Site" -BindingInformation "*:$($bindingPort):$hostHeader" -Protocol "https"
Write-Output "A régi binding $hostHeader-hez eltávolítva."
} else {
Write-Output "Binding $hostHeader-hez a port $bindingPort-on nem létezik."
}
# Új binding hozzáadása
# Új webbinding hozáadása a certifikát porthoz rendeléséhez HostHeader-rel
New-WebBinding -Name "Default Web Site" -Protocol "https" -Port $bindingPort -HostHeader $hostHeader
# Az új binding megszerzése
$binding = Get-WebBinding | Where-Object { $_.bindingInformation -like "*:$($bindingPort):$hostHeader" }
# Ha még nincs binding, új tanúsítvány hozzáadása
if ($binding) {
# A netsh használatával a tanúsítvány hozzárendelése a bindinghoz
netsh http add sslcert ipport=0.0.0.0:$bindingPort certhash=$($cert.Thumbprint) appid=$appid
Write-Output "Az IIS binding $hostHeader-hoz frissítve új tanúsítvánnyal."
} else {
Write-Output "❌ Nem sikerült hozzáadni új bindingot $hostHeader-hoz." -ForegroundColor Red
}
} else {
Write-Output "❌ A tanúsítvány $certThumbprint ujjlenyomattal nem tartalmaz privát kulcsot, nem használható SSL-hez." -ForegroundColor Red
}
} else {
Write-Output "Ma nem adtak ki új tanúsítványt."
}
Amit ez a szkript tesz:
- Új tanúsítvány ellenőrzése: A szkript ellenőrzi, hogy ma kiadtak-e új tanúsítványt.
- Ujjlenyomat megszerzése: Ha létezik tanúsítvány, megszerzi az ujjlenyomatát.
- IIS binding frissítése: Ha a tanúsítvány tartalmaz privát kulcsot (ami szükséges SSL-hez), a szkript eltávolítja a régi bindingot a 443 porton, és új bindingot ad hozzá a frissített tanúsítvánnyal.
Annak érdekében, hogy ez a szkript rendszeresen fusson, és ellenőrizze a tanúsítvány változásokat, be kell állítani a Scheduled Taskot a szerveren, amely ezt a szkriptet például óránként vagy naponta futtatja. Állítsa be tehát a Task Schedulerben ennek a PS szkriptnek a futását.
Következtetés
Ez az útmutató megmutatja Önnek, hogyan automatizálja a TLS tanúsítványok kiadását és telepítését az IIS-hez a Windows Server platformon. A tanúsítványok megszerzéséhez az Azure Key Vaultot és a CA DigiCerthez való közvetlen integrációt használtuk.
Ezután a tanúsítványt szinkronizáljuk akár másik Azure VM-re, akár helyszíni Windows szerverre, és PowerShell segítségével rendezzük a létrehozott bindingot az IIS-ben. Természetesen más módszert is használhat, mint az itt megadott.
Ismétlődő feladatok beállításával a tanúsítvány megszerzése és telepítése teljesen automatikusan és gondtalanul működik.
Sajnáljuk, hogy nem kapott választ.
Segítene a cikk jobbá tételében? Írja meg nekünk mire nem kapott választ.