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.
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
Arquitetura | Como configurar | Quando escolher | Vantagens |
---|---|---|---|
Serviços de Área de Trabalho Remota com Connection Broker (RDCB) | Server Manager → Remote Desktop Services → Edit Deployment Properties → Certificates | Ambientes RDS com RD Web, RD Gateway e/ou “farm” com balanceamento | Um 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/Registro | Servidores isolados, acesso RDP só para administração, sem implantação RDS completa | Controle 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
- Abra Server Manager e selecione Remote Desktop Services.
- Em Overview, clique em TASKS ▸ Edit Deployment Properties e, no painel esquerdo, escolha Certificates.
- 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)
- Confirme que o FQDN usado pelos clientes consta no SAN do certificado.
- 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.
- 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).
- Habilite Autoenrollment de computadores (mesma árvore de políticas: Certificate Services Client – Auto‑Enrollment = Enabled).
- 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.
- 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).
- 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
- Abra certlm.msc (Certificados – Computador Local).
- Em Personal → Certificates, clique com o botão direito em All Tasks → Import, selecione o PFX e informe a senha.
- 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 cobresrv01.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.