共用方式為


Windows 啟用浮水印會繼續顯示

適用於: ✔️執行 Windows Server 2022 Datacenter Azure Edition 的 Windows VM

本文件討論如何解決Microsoft Azure 虛擬機上 Windows 啟用浮水印的持續存在。

必要條件

徵兆

當您使用執行 Windows Server 2022 Datacenter Azure Edition 的 Azure 虛擬機 (VM)時,您會遇到下列徵兆:

  • 您會在桌面上看到浮浮浮水印,其中包含下列訊息:

    啟動 Windows。 移至 [設定] 以啟動 Windows。

    此浮浮水印表示 Windows 啟用狀態不是正版。

  • 當您開啟 [設定] 應用程式並選取 [系統>啟用] 時,[應用程式狀態] 字段表示啟用失敗。

  • 當您開啟提升許可權的命令提示字元視窗並執行下列 slmgr.vbs 大量啟用腳本時,輸出會顯示 金鑰管理服務 (KMS) 啟用成功,但前兩個徵兆仍然存在:

    cscript c:\windows\system32\slmgr.vbs /dlv
    
  • 當您重新啟動或登入 VM 時,會顯示具有下列訊息的彈出視窗:

    您的 Windows Server 2022 Datacenter Azure Edition VM 已停用,因為您未在 Azure 或支援的 Azure Stack Hypervisor 上執行,或您尚未在支援的 Azure Stack 上啟用 Azure 權益。 若要啟用 Azure 權益,請移至 Windows Admin Center > 中的叢集設定[啟用 Azure 權益]。

原因 1:Azure 實例元數據服務連線問題

Azure VM 無法建立與 Azure 實例元數據服務 (IMDS) 端點的連線,這對於取得啟用令牌至關重要。

如何判斷 VM 客體 OS 是否可以成功與 IMDS 通訊

根據您的PowerShell版本執行下列PowerShell腳本,以檢查是否從IMDS接收元數據。

  • PowerShell 6 和更新版本

    Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri 
    http://169.254.169.254/metadata/attested/document?api-version=2020-09-01
    | Format-List * | Out-File "IMDSResponse1.txt"
    
  • PowerShell 5 和舊版

    $Proxy=New-object System.Net.WebProxy
    $WebSession=new-object Microsoft.PowerShell.Commands.WebRequestSession
    $WebSession.Proxy=$Proxy
    Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "http://169.254.169.254/metadata/instance?api-version=2021-02-01" -WebSession $WebSession
    

如果您收到成功的回應,您會看到來自 VM 的元數據資訊,例如下列輸出:

compute                                                                                                                                                                  
-------                                                                                                                                                                  
@{azEnvironment=AzurePublicCloud; customData=; evictionPolicy=; isHostCompatibilityLayerVm=true; licenseType=; location=eastus; name=testWs2022; offer=WindowsServer; ...

如果沒有,這表示IMDS有線伺服器的連線在某處遭到封鎖,而且必須允許存取它。 IMDS 伺服器的 IP 為 169.254.169.254。 若要修正連線問題,請移至 解決方案 1:略過 VM 內的 Web Proxy。

對於啟用程式而言至關重要的中繼憑證已過期。

如需詳細資訊,請參閱 Azure 實例元數據服務證明數據 TLS:重大變更在這裡

如何判斷是否有任何憑證遺失

執行下列 PowerShell 腳本來檢查是否有遺漏的憑證:

# Get the signature
# Powershell 5.1 does not include -NoProxy
$attestedDoc = Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri http://169.254.169.254/metadata/attested/document?api-version=2018-10-01
#$attestedDoc = Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri http://169.254.169.254/metadata/attested/document?api-version=2018-10-01
 
# Decode the signature
$signature = [System.Convert]::FromBase64String($attestedDoc.signature)
 
# Get certificate chain
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]($signature)
$chain = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Chain
 
if (-not $chain.Build($cert)) {
   # Print the Subject of the issuer
   Write-Host $cert.Subject
   Write-Host $cert.Thumbprint
   Write-Host "------------------------"
   Write-Host $cert.Issuer
   Write-Host "------------------------"
   Write-Host "Certificate not found: '$($cert.Issuer)'" -ForegroundColor Red
   Write-Host "Please refer to the following link to download missing certificates:" -ForegroundColor Yellow
   Write-Host "https://learn.microsoft.com/en-us/azure/security/fundamentals/azure-ca-details?tabs=certificate-authority-chains" -ForegroundColor Yellow
} else {
   # Print the Subject of each certificate in the chain
   foreach($element in $chain.ChainElements) {
       Write-Host $element.Certificate.Subject
       Write-Host $element.Certificate.Thumbprint
       Write-Host "------------------------"
   }
 
   # Get the content of the signed document
   Add-Type -AssemblyName System.Security
   $signedCms = New-Object -TypeName System.Security.Cryptography.Pkcs.SignedCms
   $signedCms.Decode($signature);
   $content = [System.Text.Encoding]::UTF8.GetString($signedCms.ContentInfo.Content)
   Write-Host "Attested data: " $content
   $json = $content | ConvertFrom-Json
}

如果遺漏任何憑證,您會看到類似下列的輸出:

CN=metadata.azure.com, O=Microsoft Corporation, L=Redmond, S=WA, C=US
3ACCC393D3220E40F09A69AC3251F6F391172C32
------------------------
CN=Microsoft Azure RSA TLS Issuing CA 04, O=Microsoft Corporation, C=US
------------------------
Certificate not found: 'CN=Microsoft Azure RSA TLS Issuing CA 04, O=Microsoft Corporation, C=US'
Please refer to the following link to download missing certificates:
https://learn.microsoft.com/en-us/azure/security/fundamentals/azure-ca-details?tabs=certificate-authority-chains

若要修正憑證問題,請移至 解決方案 2:確定防火牆和 Proxy 已設定為允許憑證下載

解決方案 1:略過 VM 內的 Web Proxy

IMDS 是 REST API,可在已知且無法路由傳送的 IP 位址 (169.254.169.254) 取得。 只有下列 URI 才能從 VM 記憶體取 IMDS 端點: http://169.254.169.254/metadata/instance。 VM 與 IMDS 之間的通訊永遠不會離開主機。 讓您的 HTTP 用戶端在查詢 IMDS 時略過 VM 內的 Web Proxy。 此外,請確定用戶端會以與處理 168.63.129.16 IP 位址相同的方式處理 169.254.169.254 IP 位址。 若要確認此直接網路連線存在,請遵循下列步驟:

注意

168.63.129.16 是Microsoft擁有的虛擬公用IP位址,用於與 Azure 資源通訊。

  1. 若要檢視 VM 上的本機路由表,請 執行路由列印 命令:

    route print
    
  2. 若要找出 IMDS 目標的路由專案,請移至 Active Routes 輸出的 IPv4 Route Table 區段,然後尋找數據 169.254.169.254 行中包含 Network Destination IP 位址的數據列。

    網路目的地 網路遮罩 閘道 介面 計量
    0.0.0.0 0.0.0.0 172.16.69.1 172.16.69.7 10
    127.0.0.0 255.0.0.0 On-link 127.0.0.1 3:31
    127.0.0.1 255.255.255.255 On-link 127.0.0.1 3:31
    127.255.255.255 255.255.255.255 On-link 127.0.0.1 3:31
    168.63.129.16 255.255.255.255 172.16.69.1 172.16.69.7 11
    169.254.169.254 255.255.255.255 172.16.69.1 172.16.69.7 11
    ... ... ... ... ...

    在範例路由表輸出中,IMDS 目標項目位於最後一個數據列中,而對應的網路介面是 Interface 該數據列內數據行的值。 (在此範例中,網路介面為 172.16.69.7。)

  3. 若要檢視 VM 的 IP 組態,請 執行 ipconfig 命令:

    ipconfig /all
    
  4. 在 ipconfig 命令輸出中,尋找欄位符合 IMDS 專案網路介面值的 IP IPv4 Address 組態(172.16.69.7):

    ...
    Ethernet adapter Ethernet:
    
    Connection-specific DNS Suffix  . : xic3mnxjiefupcwr1mcs1rjiqa.cx.internal.cloudapp.net
    Description . . . . . . . . . . . : Microsoft Hyper-V Network Adapter
    Physical Address. . . . . . . . . : 00-0D-3A-E5-1C-C0
    DHCP Enabled. . . . . . . . . . . : Yes
    Autoconfiguration Enabled . . . . : Yes
    Link-local IPv6 Address . . . . . : fe80::3166:ce5a:2bd5:a6d1%3(Preferred)
    IPv4 Address. . . . . . . . . . . : 172.16.69.7(Preferred)
    Subnet Mask . . . . . . . . . . . : 255.255.255.0
    ...
    

    在範例 ipconfig 輸出中,包含 IMDS 專案網路介面值的 IP 組態為 Ethernet adapter Ethernet

  5. 在您找到的IP組態中,複製媒體 存取控制 (MAC) 位址和 VM 使用的主要私人IP位址。 MAC 位址會顯示在 Physical Address 欄位中,而主要私人 IP 位址會顯示在 IPv4 Address 欄位中。 在這裡範例中,MAC 位址和主要私人 IP 位址 00-0D-3A-E5-1C-C0 分別是 和 172.16.69.7

  6. 檢查 Azure 用於 VM 的 MAC 和主要私人 IP 位址是否符合 VM 客體 OS 實際使用的 MAC 位址和主要私人 IP 位址(您在先前步驟中找到的位址)。 若要判斷 Azure 使用什麼做為 MAC 位址,您可以使用 Azure CLI。 若要判斷 Azure 使用什麼作為主要私人 IP 位址,您可以檢查 Azure 入口網站 中的網路組態。

    • 尋找 MAC 位址(在 PowerShell 腳稿中使用 Azure CLI)

      執行下列會叫用 Azure CLI 命令的 PowerShell 腳本。 此腳本會 叫用 az vm nic list 命令來收集 VM 上網路介面的名稱。 然後,它會叫 用 az vm nic show 命令來顯示每個網路介面的名稱,不論該網路介面是主要網路介面 (TrueFalse), 以及網路介面的 MAC 位址:

      注意

      在命令中,“nic” 代表網路介面,而不是網路介面卡。

      # Placeholder variable definitions
      $ResourceGroup = "<resource-group-name>"
      $VmName = "<virtual-machine-name>"
      
      # Code
      $NicNames = az vm nic list --resource-group $ResourceGroup --vm-name $VmName |
          ConvertFrom-Json | Foreach-Object { $_.id.Split('/')[-1] }
      foreach($NicName in $NicNames)
      {
          az vm nic show --resource-group $ResourceGroup --vm-name $VmName --nic $NicName |
              ConvertFrom-Json | Format-Table -Property name, primary, macAddress
      }
      
      name       primary macAddress
      ----       ------- ----------
      wintest767    True 00-0D-3A-E5-1C-C0
      
    • 尋找主要私人IP位址(使用 Azure 入口網站):

      1. Azure 入口網站中,搜尋並選取 [虛擬機器]

      2. 在 VM 清單中,選取 VM 的名稱。

      3. 在 VM [概觀] 頁面的 [屬性] 索引標籤上,找出 [網络] 標題。

      4. 在 [ 私人 IP 位址] 字段中,複製顯示的 IPv4 位址。

  7. 如果 Azure 與 VM 客體 OS 之間的 MAC 位址或主要私人 IP 位址不相同,請使用各種 路由 命令來更新路由表,讓主要網路介面和 IP 位址設為目標。

解決方案2:確定防火牆和 Proxy 已設定為允許憑證下載

  1. 檢查是否已 安裝 KB 5036909 。 如果沒有,請加以安裝。 您可以從Microsoft更新目錄取得它

  2. 如果您已安裝更新,但仍遇到問題,請確認系統的防火牆和 Proxy 已設定為允許下載憑證。 如需詳細資訊,請參閱 憑證下載和撤銷清單

    或者,您也可以直接從 根和次級證書頒發機構單位鏈結下載並安裝所有憑證。

    注意

    請務必在安裝精靈中選取存放區位置作為 本機計算機

  3. 以系統管理員身分開啟命令提示字元、流覽至 c:\windows\system32,然後執行 fclip.exe

  4. 重新啟動 VM 或註銷,然後再次登入。 您會看到首頁上的浮浮顯示,且 [設定>啟用] 畫面中的 [應用程式狀態] 字段會回報成功。

其他相關資訊

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。