Certificado SSL/TLS no RDP do Windows Server 2022: como vincular corretamente (RDS e host isolado)

Precisa associar um certificado SSL/TLS ao RDP no Windows Server 2022? Este guia prático cobre ambientes com Connection Broker e servidores isolados, trazendo passo a passo via Server Manager, GPO e PowerShell, além de checklist de validação, automação de renovação e solução de problemas.

Índice

Por que vincular um certificado SSL/TLS ao RDP

Um certificado válido elimina o aviso de identidade no mstsc, protege a negociação TLS e ajuda a cumprir requisitos de conformidade. Em versões antigas do Windows, o caminho clássico era editar o RDP‑Tcp > Certificate no “Remote Desktop Services Manager”. No Windows Server 2022 essa consola não existe mais: o vínculo de certificado é feito de outras formas, dependendo da arquitetura.

Caminhos possíveis e quando usar cada um

ArquiteturaComo configurarQuando escolherVantagens
Serviços de Área de Trabalho Remota com Connection Broker (RDCB)Server Manager → Remote Desktop Services → Edit Deployment PropertiesCertificatesAmbientes RDS com RD Web, RD Gateway e/ou “farm” com balanceamentoUm assistente central aplica o mesmo certificado às funções RDS relevantes
Sem Connection Broker (host único / RDP administrativo)GPO (escala) ou configuração manual (por servidor) via PowerShell/RegistroServidores isolados, acesso RDP só para administração, sem implantação RDS completaControle fino por servidor; simples para poucos hosts

Pré‑requisitos e boas práticas

  • Certificado com EKU de Server Authentication (1.3.6.1.5.5.7.3.1). Se disponível, inclua também Remote Desktop Authentication (1.3.6.1.4.1.311.54.1.2).
  • O SAN deve conter exatamente o FQDN pelo qual os clientes acessam (ex.: rdp.suaempresa.com). Wildcards funcionam para um único nível (ex.: *.suaempresa.com).
  • Cadeia de certificação confiável na estação cliente (AC pública ou AC interna distribuída por GPO).
  • Em “farm”/HA, use um nome DNS comum (VIP, registro A/CNAME) e o mesmo PFX em todos os nós.
  • Importe o PFX com chave privada no repositório Computador Local → Pessoal (My).

Ambiente RDS com Connection Broker (RDCB)

Passo a passo no Server Manager

  1. Abra Server Manager e selecione Remote Desktop Services.
  2. Em Overview, clique em TASKS ▸ Edit Deployment Properties e, no painel esquerdo, escolha Certificates.
  3. Para cada função aplicável, selecione Select existing certificate e aponte para seu PFX (com senha), ou importe do repositório local:
    • RD Connection Broker – Publishing
    • RD Connection Broker – Enable Single Sign On
    • RD Web Access
    • RD Gateway (se existir)
  4. Confirme que o FQDN usado pelos clientes consta no SAN do certificado.
  5. Conclua o assistente. Se solicitado, reinicie os serviços RDS para aplicar.

Boas práticas específicas

  • Mantenha o mesmo certificado em todos os RD Session Hosts que participam da coleção.
  • Se utilizar RD Gateway, pense em um certificado separado (ou wildcard) que atenda tanto o Gateway quanto o Web Access, reduzindo manutenção.
  • Registre eventos após a troca de certificado e valide o acesso externo e interno.

Como validar

  • Conecte‑se via mstsc ao FQDN (não ao IP). No prompt de segurança, abra Exibir certificado e confira Emitido para e Emitido por.
  • No servidor, verifique o Event Viewer em Applications and Services Logs → Microsoft → Windows → TerminalServices‑* para mensagens sobre certificado/TLS.

Servidor isolado sem Connection Broker

Nesse cenário não há Edit Deployment Properties. Você tem duas rotas principais: GPO (para escala) ou configuração manual por servidor.

Opção com GPO para vários servidores

Indicada quando você gerencia dezenas/centenas de hosts RDP.

  1. Distribua confiança da AC: em uma GPO vinculada às OUs de servidores, publique a cadeia da AC em Computer Configuration → Policies → Windows Settings → Security Settings → Public Key Policies (Trusted Root/Intermediate).
  2. Habilite Autoenrollment de computadores (mesma árvore de políticas: Certificate Services Client – Auto‑Enrollment = Enabled).
  3. Modelo de certificado: use um template com EKU de Server Authentication (e opcionalmente Remote Desktop Authentication) e assunto DNS igual ao FQDN do servidor ou do nome comum de acesso.
  4. Escolha como o RDP selecionará o certificado:
    • Por Template: defina a política de “certificado de autenticação de servidor” do RD Session Host para usar o template publicado (o serviço seleciona automaticamente o certificado válido).
    • Por Impressão Digital (Thumbprint): distribua por GPP/Registro o valor SSLCertificateSHA1Hash para cada host (útil quando o certificado é específico por servidor).
  5. Atualize/valide: faça gpupdate /force, reinicie o serviço TermService e teste a conexão por FQDN.

Dica: ao usar seleção por Template + Autoenrollment, a renovação é automática. O RDP adotará o novo certificado sem intervenção manual quando o serviço for reiniciado ou no próximo ciclo de políticas.

Opção com configuração manual por servidor (PowerShell)

Siga se você tem poucos hosts ou precisa ajustar rapidamente um único servidor.

Importar o PFX no repositório correto

  1. Abra certlm.msc (Certificados – Computador Local).
  2. Em Personal → Certificates, clique com o botão direito em All Tasks → Import, selecione o PFX e informe a senha.
  3. Confirme que o certificado aparece com a chave privada (ícone com chave).

Vincular o certificado ao listener RDP

Use PowerShell para escrever a impressão digital (hash SHA‑1) no parâmetro do listener RDP‑Tcp via WMI/CIM e reiniciar o serviço.

# Executar no servidor, como Administrador
param(
  [Parameter(Mandatory=$true)]
  [string]$Thumbprint # sem espaços
)

$thumb = $Thumbprint -replace '\s',''

Garante que o certificado existe no repositório Computador Local\Personal
$cert = Get-Item -Path "Cert:\LocalMachine\My\$thumb"

Obtém o hash em bytes (SHA-1)
$hash = $cert.GetCertHash()

Atualiza o listener RDP (RDP-Tcp) via CIM
$ts = Get-CimInstance -Namespace root\cimv2\TerminalServices -ClassName Win32_TSGeneralSetting -Filter "TerminalName='RDP-Tcp'"
Set-CimInstance -InputObject $ts -Property @{ SSLCertificateSHA1Hash = $hash } | Out-Null

Reinicia o serviço de Área de Trabalho Remota
Restart-Service -Name TermService -Force

Write-Host "Vinculado com sucesso ao thumbprint $thumb"

Se preferir localizar o certificado pelo Subject/SAN, use um filtro:

$fqdn = "rdp.suaempresa.com"
$cert = Get-ChildItem Cert:\LocalMachine\My |
        Where-Object {
          $_.Subject -like "CN=$fqdn" -or
          ($.Extensions | Where-Object { $.Oid.FriendlyName -eq "Subject Alternative Name" -and $_.Format(0) -match $fqdn })
        } |
        Sort-Object NotAfter -Descending |
        Select-Object -First 1

\$hash = \$cert.GetCertHash()
\$ts   = Get-CimInstance -Namespace root\cimv2\TerminalServices -ClassName Win32\_TSGeneralSetting -Filter "TerminalName='RDP-Tcp'"
Set-CimInstance -InputObject \$ts -Property @{ SSLCertificateSHA1Hash = \$hash } | Out-Null
Restart-Service TermService -Force 

Como validar

  • Conecte‑se via mstsc ao FQDN e confira o certificado exibido.
  • Revise o Event Viewer em Microsoft → Windows → TerminalServices‑LocalSessionManager e TerminalServices‑RemoteConnectionManager.

Automação de renovação

Quando o certificado é renovado, o thumbprint muda. Para que o RDP adote automaticamente a versão mais recente com o mesmo assunto/SAN, agende uma Tarefa (ex.: diária) com o script abaixo:

# Atualiza o listener RDP para o certificado mais novo de um FQDN específico
$fqdn = "rdp.suaempresa.com"

\$cert = Get-ChildItem Cert:\LocalMachine\My |
Where-Object {
\$.Subject -like "CN=\$fqdn*" -or
(\$.Extensions | Where-Object { \$.Oid.FriendlyName -eq "Subject Alternative Name" -and \$*.Format(0) -match \$fqdn })
} |
Sort-Object NotAfter -Descending |
Select-Object -First 1

if (-not \$cert) { throw "Nenhum certificado encontrado para \$fqdn." }

\$hash = \$cert.GetCertHash()
\$ts   = Get-CimInstance -Namespace root\cimv2\TerminalServices -ClassName Win32\_TSGeneralSetting -Filter "TerminalName='RDP-Tcp'"
Set-CimInstance -InputObject \$ts -Property @{ SSLCertificateSHA1Hash = \$hash } | Out-Null

Restart-Service TermService -Force 

Erros comuns e como corrigir

  • Certificado “não aparece” no assistente do RDS: confirme que ele está em Computador Local → Personal, com chave privada. Certificados no repositório do Usuário Atual não são elegíveis.
  • Nome não corresponde: se você se conecta a rdp.exemplo.com mas o certificado cobre srv01.exemplo.com, os clientes verão alerta. Inclua o FQDN usado no SAN.
  • Permissões de chave: ao usar KSP/Hardware, garanta que a conta de serviço (normalmente Local System, serviço TermService) pode acessar a chave privada.
  • Thumbprint com espaços/caracteres ocultos: ao colar a impressão digital, remova espaços e caracteres invisíveis ($thumb -replace '\s','').
  • Conexão por IP: certificados validam nomes, não endereços IP (salvo se o IP constar como SAN, o que é raro). Sempre teste por FQDN.
  • Cliente antigo: force TLS moderno com políticas de segurança se necessário. Clientes muito antigos podem falhar ao negociar com servidores mais restritivos.

Checklists rápidos

Checklist de preparo do certificado

  • EKUs: Server Authentication (obrigatório) e, se possível, Remote Desktop Authentication.
  • SAN contém o FQDN de acesso.
  • Chave privada presente e exportável se você vai reutilizar o PFX em vários nós.
  • Cadeia completa instalada no servidor e confiada pelos clientes.

Checklist de validação pós‑troca

  • Conexão mstsc ao FQDN sem avisos.
  • Eventos do TerminalServices‑* sem erros de certificado.
  • Se houver RD Gateway/Web, validação via clientes externos.
  • Renovação testada (se houver automação).

Exemplos úteis de PowerShell

Importar um PFX no repositório do Computador:

$pfx = "C:\Temp\rdp.pfx"
$pwd = Read-Host -AsSecureString "Senha do PFX"
Import-PfxCertificate -FilePath $pfx -CertStoreLocation "Cert:\LocalMachine\My" -Password $pwd | Format-List Subject,Thumbprint,NotAfter

Criar certificado autoassinado para homologação (não recomendado para produção):

New-SelfSignedCertificate `
  -DnsName "rdp.suaempresa.com" `
  -CertStoreLocation "Cert:\LocalMachine\My" `
  -KeyLength 2048 -KeyExportPolicy Exportable `
  -KeyUsage DigitalSignature, KeyEncipherment `
  -TextExtension @(
    "2.5.29.37={text}1.3.6.1.5.5.7.3.1,1.3.6.1.4.1.311.54.1.2"
  )

Ler o certificado atualmente vinculado ao RDP:

$ts = Get-CimInstance -Namespace root\cimv2\TerminalServices -ClassName Win32_TSGeneralSetting -Filter "TerminalName='RDP-Tcp'"
$hash = ($ts.SSLCertificateSHA1Hash | ForEach-Object { $_.ToString("x2") }) -join ""
Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -replace '\s','' -ieq $hash } |
Select-Object Subject, Thumbprint, NotAfter

Perguntas frequentes

  • Posso usar certificado wildcard? Sim, desde que o FQDN acessado seja coberto pelo curinga (um nível). Em RDS, muitas vezes um único wildcard cobre RD Web e RD Gateway.
  • RDP suporta SNI? O listener RDP não usa SNI para escolher certificado. Planeje um certificado por nome/endpoint.
  • Posso reutilizar o mesmo PFX em vários hosts? Sim, especialmente em “farms” atrás de um VIP. Proteja o PFX e rode com políticas adequadas.
  • É obrigatório “Remote Desktop Authentication” na EKU? Não é obrigatório; Server Authentication é suficiente. A EKU específica do RDP é recomendada quando disponível, principalmente em ambientes com AD CS.

Resumo

No Windows Server 2022, a antiga edição do RDP‑Tcp > Certificate via “Remote Desktop Services Manager” foi substituída por mecanismos diferentes. Em ambientes com Connection Broker, use o Server Manager → Edit Deployment Properties → Certificates para aplicar o PFX às funções RDS. Sem RDCB, vincule o certificado via GPO (escala e renovação automática) ou por PowerShell diretamente no servidor, sempre garantindo que o FQDN usado pelos clientes esteja no SAN, que a cadeia seja confiável e que o serviço TermService seja reiniciado após a troca. Validar com mstsc e Event Viewer consolida a alteração com segurança.

Índice