以下は単に機能しません:
Remove-DnsServerSigningKey -KeyId $key.KeyId -ZoneName $zonename -Force
$ zonenameが有効なゾーンであり、key-idが存在し、有効である場合。このコマンドは、最初にゾーンの署名を解除した場合に機能しますが、再署名の直後にこれを実行したいと思います。
論理:
- 現在のすべてのゾーン署名キーを取得します
- 新しいZSKを1つ追加します
- 新しいZSKでゾーンを辞任する
- 3秒間スリープします(猶予期間のみ)
- 以前のすべてのキーをループします(この時点では、新しいキーはリストにありません)
- 前のキーを削除する
以前のキーを削除しようとすると、次のようになります。
Remove-DnsServerSigningKey : Failed to delete the signing key __[Key-ID]__ for the zone __[Key-ID]__ on server __[Server-addr]__ Please check
extended error for additional details.
At C:\Users\Administrator\Desktop\dnssec.ps1:79 char:13
+ Remove-DnsServerSigningKey -KeyId $key.KeyId -ZoneName $zonename -Fo ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (__[Key-Id]__:root/Microsoft/...erverSigningKey) [Remove-DnsServerSigningKey], CimException
+ FullyQualifiedErrorId : WIN32 9119,Remove-DnsServerSigningKey
コードは次のようになります。
function resign {
param(
[string]$zonename
)
$zonename + " <- Re-Signing"
## Grab all current keys (incl active ones)
$keys = Get-DnsServerSigningKey -ZoneName $zonename
$zonename + " <- Creating new ZSK"
#Add a new ZSK
Add-DnsServerSigningKey -ZoneName $zonename -ComputerName 127.0.0.1 -CryptoAlgorithm RsaSha256 -Type ZoneSigningKey
#Resign the zone with the newly added key
Invoke-DnsServerZonesign -ZoneName $zonename –DoResign -Force
Start-Sleep -s 1
# After the resign, we delete all previous ZONE signing keys (but keep KSK)
$zonename + " <- Removing ZSKeys"
foreach ($key in $keys) {
if ($key.KeyType -eq "ZoneSigningKey") {
Remove-DnsServerSigningKey -ComputerName 127.0.0.1 -ZoneName $zonename -KeyId $key.KeyId -Force
}
}
}
Notabelは、ゾーンの署名を完全に解除して同じdelete-keysコードを実行すると、機能する可能性があります。それが機能しないのは、ゾーンを辞任するときだけです。削除しようとしているキーは、KeySigningKey(確認済み)ではなく、ZoneSigningKeyタイプです。