Se você já está executando comandos remotos com PowerShell Remoting (PSRemoting), você sabe o quão conveniente essa funcionalidade é. Você pode se conectar a um ou mais computadores remotos e gerenciá-los como se estivessem locais. O PSRemoting depende do Windows Remote Management (WinRm) para que isso aconteça, e se você não estiver usando o WinRM sobre SSL, pode estar se expondo a alguns problemas de segurança.
Neste tutorial prático, você aprenderá como configurar o Windows no cliente e no servidor para usar o WinRM sobre HTTPS (SSL) e como usar certificados para autenticação ao usar o WinRM sobre HTTPS.
Pré-requisitos
Se você deseja seguir este tutorial, certifique-se de ter o seguinte:
- A Windows 7+ or Server 2008 R2 machine to serve as the client machine. This tutorial will use Windows 10.
- A Windows 7+ or Server 2008 R2+ machine to serve as the server machine. This tutorial will use Windows Server 2019.
- Acesso a uma conta de administrador local ou uma conta com direitos administrativos locais em ambos os computadores cliente e servidor.
- Uma infraestrutura de chave pública (PKI) de Active Directory Certificate Services (ADCS) configurada. Seria útil se você implementasse o ADCS para implementações de produção, mas é opcional para este tutorial e teste. O tutorial assumirá que a PKI está configurada como uma CA corporativa ou autônoma.
Por que usar o WinRM sobre SSL?
PSRemoting, por padrão, utiliza o WinRM e permite que você gerencie máquinas remotamente. Uma vez que o PSRemoting estabelece uma sessão sobre o WinRM, ele então criptografa toda a comunicação do cliente para o servidor. Além disso, o procedimento de configuração para implementar o PSRemoting sem HTTPS é bastante direto.
Se o PSRemoting já criptografa a comunicação da sessão, por que passar pelo incômodo de configurar algo como ADCS e gerenciar certificados quando já está criptografado?
Porque durante o processo de autenticação, as credenciais podem ser enviadas em formatos inseguros, dependendo do tipo de autenticação utilizado.
Uma das maneiras mais fáceis de tornar o PSRemoting mais seguro é usar o WinRM sobre HTTPS em vez de HTTP. O HTTPS envolve toda a sua conexão, incluindo a autenticação, dentro da camada de criptografia que o WinRM já utiliza. O HTTPS também fornece simultaneamente uma maneira de validar que o servidor ao qual você está se conectando é realmente o que você pensa que é.
Configurando o WinRM com um Certificado Autoassinado
Agora, vamos às demonstrações. Para o primeiro truque, você vai aprender como configurar a criptografia da comunicação do PSRemoting com WinRM sobre SSL através de um certificado autoassinado.
Usar um certificado autoassinado é uma ótima maneira de configurar um ambiente de teste sem se preocupar com uma PKI como a ADCS. Quando você usa um certificado autoassinado, você gera um certificado que o próprio servidor assina, o que basicamente valida a si mesmo.
Certificados existem para realizar duas tarefas típicas: autenticar uma conexão e criptografá-la. Usar um certificado autoassinado apenas implementa o último. Para validar a identidade de um servidor, você sempre deve usar certificados fornecidos pela PKI. Os certificados fornecidos pela PKI oferecem uma única fonte de confiança em comparação com ter que confiar manualmente em cada certificado autoassinado individualmente.
Configurar o WinRM sobre SSL com um certificado autoassinado requer quatro etapas de alto nível:
- Criar o certificado autoassinado na máquina de destino.
- Configurar o servidor WinRM (listener) para usar o certificado autoassinado para autenticação.
- Abrir as portas apropriadas no firewall do Windows da máquina de destino.
- Executar um comando para iniciar uma conexão remota no cliente usando um cmdlet do PowerShell como
Enter-PSSession
.
Vamos agora passar por cada etapa.
Criando um Certificado Autoassinado
A primeira etapa é gerar um certificado autoassinado no servidor. Ao conectar, o PSRemoting usará este certificado para criptografar toda a comunicação.
Enquanto estiver no ServerB com um console do Windows PowerShell aberto como administrador, execute o cmdlet New-SelfSignedCertificate
conforme mostrado abaixo. Executar o comando abaixo gera um certificado para ServerB.domain.com na loja de certificados pessoais da máquina local

. O parâmetro Subject
deve ser o nome de domínio totalmente qualificado do servidor. O WinRm usa o assunto para validar a identidade do servidor.
Mesmo se o servidor estiver em um grupo de trabalho, sempre forneça um nome de domínio, por exemplo, domain.com ou lab.local. Ao se conectar à máquina de destino, o nome DNS ao qual você se conecta deve corresponder exatamente a este nome de Assunto, caso contrário, a conexão falhará.
O TextExtension
permite que você defina o uso da chave do certificado (2.5.29.37), que define para que o certificado pode ser usado. Defina o uso da chave para Autenticação de Servidor ({text}1.3.6.1.5.5.7.3.1
) para garantir que o certificado só possa ser usado para autenticar a identidade de um servidor.
Depois que
New-SelfSignedCertificates
é executado, ele retornará a impressão digital do certificado que gerou. Salve isso, pois você precisará dele para o próximo comando.
Configurando o WinRM Listener
Quando você cria o certificado autoassinado no servidor, configure então o ouvinte WinRM para começar a usar esse certificado para autenticação. Para fazer isso, utilize o comando winrm create
conforme mostrado abaixo.
O Endereço=*
no comando abaixo informa ao ouvinte para escutar em qualquer endereço IP configurado no servidor. Se o servidor tiver vários endereços IP configurados, você pode definir um endereço IP específico aqui.
Certifique-se de substituir o espaço reservado
<imprima digital do certificado aqui>
pela impressão digital retornada na última etapa.

Abrindo a porta do firewall SSL do WinRM
Em seguida, se você estiver usando o firewall do Windows, será necessário permitir o tráfego HTTPS que entra no servidor pela porta HTTPS padrão 5986
.
Abra a porta do firewall para o WinRM sobre HTTPS usando o PowerShell, executando o comando abaixo.
Conectando-se ao servidor via SSL
Agora você configurou o servidor remoto do Windows para aceitar conexões WinRM sobre SSL. Neste momento, volte para o cliente e inicie quaisquer comandos PSRemoting que você gostaria de testar. Por exemplo, você poderia tentar o Enter-PSSession
ou Invoke-Command
cmdlet. Somente agora, a conexão é um pouco diferente do que com a conexão HTTP padrão.
Conectar-se via HTTPS geralmente requer um único parâmetro UseSSL
. Este parâmetro informa ao comando para procurar um ouvinte WinRM HTTPS em vez de um ouvinte HTTP, como faria por padrão. O parâmetro UseSSL
está disponível em mais comandos PSRemoting.
Para testar, execute Enter-PSSession
fornecendo o FQDN do servidor conforme definido pelo sujeito do certificado autoassinado, um objeto PSCredential para definir o nome de usuário e a senha, e finalmente, o parâmetro de switch UseSSL
.
Se você executar o comando acima, receberá uma mensagem de erro, pois configurou o ouvinte WinRM no servidor para usar um certificado autoassinado. Sempre que o cliente PSRemoting tenta autenticar-se no servidor, ele tentará validar o certificado e não poderá. Um certificado autoassinado não tem uma cadeia de confiança que o comando possa seguir e falha.

Para se conectar ao servidor com um certificado autoassinado, você deve anular a verificação de confiança do certificado. Você pode fazer isso criando uma opção de PSSession chamada SkipCACheck
usando o cmdlet New-PSSessionOption
e passando-o para o comando conforme mostrado abaixo.
Você pode definir muitos objetos de PSSessionOption diferentes para adicionar opções à sua conexão remota que não estão incluídas diretamente no cmdlet
Enter-PSSession
.
Tente se conectar novamente e o PowerShell agora deve solicitar suas credenciais. Uma vez fornecidas, você deverá se conectar ao servidor com o WinRM sobre SSL!
Configurando o WinRM com um Certificado Assinado por CA
Se você pretende usar o PSRemoting usando o WinRM em produção e deseja permanecer o mais seguro possível, você precisa focar no WinRM sobre SSL usando um certificado assinado por uma autoridade de certificação (CA).
Os certificados assinados por CA mantêm uma cadeia de confiança e são mais seguros do que simples certificados autoassinados, porque validam a identidade do emissor do certificado.
Se você está em um ambiente de Active Directory, uma das maneiras mais comuns de configurar uma CA é com ADCS. Com o ADCS, você pode implantar certificados em dispositivos e configurar o WinRM para usar esses certificados.
Este tutorial pressupõe que você já tenha ADCS configurado e funcionando em seu ambiente.
Para uma configuração rápida, você pode seguir a documentação da Microsoft, mas para implantações em produção, você deve pesquisar a configuração detalhadamente, pois uma autoridade de certificação está no centro dos esforços de criptografia de uma organização.
Criando a Solicitação de Certificado
O primeiro passo para usar um certificado emitido por uma autoridade de certificação é criar o certificado. Para criar o certificado, você deve primeiro emitir uma solicitação de certificado usando uma solicitação de assinatura de certificado (CSR). Uma vez gerada, essa CSR pode ser enviada para a autoridade de certificação para emitir o certificado.
Os passos desta seção funcionarão em implantações ADCS quando for uma AC corporativa ou uma AC autônoma. Se você estiver usando uma AC corporativa integrada ao AD, é possível agilizar a inscrição de certificados sem passar pelos passos desta seção usando a autoinscrição de certificados ou modelos de certificado.
Enquanto estiver no servidor (ServerB neste tutorial), crie o CSR:
- Execute certlm.msc para abrir o gerenciador de certificados do Windows.
2. Clique com o botão direito na loja Pessoal e selecione Todas as Tarefas —> Operações Avançadas —> Criar Solicitação Personalizada.
3. Para este tutorial, deixe todos os campos como padrão até chegar à página Informações do Certificado vista abaixo. Quando chegar aqui, clique na lista suspensa Detalhes e selecione Propriedades.

4. Clique na aba Assunto e altere o Tipo para Nome Comum.
5. Agora insira o nome de domínio totalmente qualificado do servidor se estiver conectado a um domínio ou apenas o nome do host se não estiver e clique em Adicionar.

Observe que para uso com um ouvinte SSL do WinRM, é necessário usar o nome comum. As outras opções da lista podem ser incluídas, mas não são necessárias para esta implantação.
6. Clique na aba Extensão.
7. Se você não estiver usando autenticação baseada em certificado, que será abordada posteriormente, expanda o cabeçalho de uso estendido da chave e adicione Autenticação do Servidor. Esse tipo de uso de chave informa ao Windows que o certificado deve ser usado para autenticar um servidor. Outras opções incluem Autenticação do Cliente, Assinatura de Código e Criptografia de Documentos.
8. Se você deseja configurar a autenticação baseada em certificado, certifique-se de escolher Autenticação do Cliente, como mostrado abaixo.

9. Em seguida, clique na guia Chave Privada e observe as Opções de Chave. Altere o tamanho da chave padrão de 1024 para pelo menos 2048 para fortalecer a segurança do par de chaves.
Também existem provedores criptográficos mais fortes disponíveis no Windows, mas você pode enfrentar incompatibilidade com software mais antigo.
10. Feche a janela de Propriedades do Certificado e salve suas configurações clicando em OK e clique em Avançar para continuar com as instruções.
11. Agora forneça um caminho para a saída do pedido de certificado onde você pode recuperá-lo posteriormente e clique em Concluir.
Uma vez concluído, você deve ter um arquivo de solicitação de certificado.
Solicitando um Certificado
Depois de criar o pedido, agora você precisará enviar esse pedido ao seu CA, que gerará o certificado. Para fazer isso:
- Navegue até seu servidor ADCS em http://<nome do servidor FQDN>/certsrv/certrqxt.asp.

2. Abra o arquivo de solicitação de certificado criado anteriormente com o Bloco de Notas e copie o texto do arquivo de solicitação de certificado para a caixa de solicitação. Nada é necessário para Atributos Adicionais para este certificado.
3. Clique em Enviar. Isso enviará sua solicitação para a AC. Em seguida, deverá mostrar o ID da solicitação, que será necessário posteriormente. Salve isso! Você vai precisar mais tarde.
4. Agora, conecte-se ao servidor da AC que faz parte do seu ambiente ADCS usando o Gerenciador de Certificados do Windows no seu computador local ou via RDP executando certsrv.msc.
5. Clique em Solicitações Pendentes.

6. Clique com o botão direito na solicitação pendente, clique em Todas as Tarefas, e clique em Aprovar. Isso aprovará a solicitação que você acabou de enviar com base no ID da solicitação da etapa anterior.
Matriculando o Certificado
Agora que você emitiu um certificado na AC, é hora de matricular o certificado no servidor em que está configurando o WinRM. Para fazer isso:
- Do servidor em que está configurando o WinRM sobre SSL, acesse http://<nome do servidor FQDN>/certckpn.asp. Você deverá ver uma única solicitação de certificado pendente.

Você pode obter o certificado público de outra máquina, se necessário, mas começar a partir do servidor em que está configurando o WinRM sobre HTTPS simplifica o processo.
2. Selecione a solicitação que você enviou na lista e faça o download da cadeia de certificados. Você deve baixar a cadeia de certificados completa se o servidor que você está configurando o WinRM via HTTPS tiver sua CA como um servidor raiz.

3. Abra o arquivo da cadeia de certificados. Você deverá ver um certificado para o seu servidor e quaisquer certificados de autoridade de certificação acima na cadeia. Abaixo win2.lab.int está o certificado solicitado e WIN2-CA é o certificado da CA que emitiu o certificado para win2.lab.int.

4. Dê um duplo clique em um dos certificados e, na caixa que abrir, clique no botão Instalar Certificado. Como este certificado será usado pelo servidor e não por um usuário específico, altere a opção para Máquina Local.

5. Continue através do prompt deixando tudo como padrão. As configurações padrão devem colocar o certificado no Armazenamento de Certificados Raiz Confiáveis.
6. Agora repita as etapas 3-5 para cada um dos outros certificados na lista. Se você tiver mais de um certificado, certifique-se de que todos os outros certificados sejam colocados no armazenamento de Autoridades de Certificação Intermediárias.
Criar e Configurar o Listener WinRM HTTPS
Agora que todos os certificados estão instalados, é hora de configurar o WinRM no seu servidor para usar esse certificado para o listener.
Com o PowerShell aberto no servidor WinRM:
- Execute o comando abaixo para configurar automaticamente o ouvinte WinRM. O comando
winrm
faz isso procurando na loja de certificados da máquina local por um certificado que corresponda aos requisitos do WinRM.
2. Por padrão, o Firewall do Windows bloqueará a porta HTTPS do WinRM, 5986
. Para garantir que o firewall permita a porta de entrada 5986
, execute o seguinte comando PowerShell:
Testando a Conexão SSL do WinRM
Neste ponto, você está pronto para se conectar. Usando seus cmdlets PSRemoting favoritos, como Invoke-Command
ou Enter-PSSession
, conecte-se ao servidor e use o parâmetro UseSSL
.
Sempre garanta que o valor do parâmetro
ComputerName
corresponda exatamente ao nome comum fornecido durante a criação do certificado. Se você tentar se conectar a um nome de host diferente ou talvez ao endereço IP do host, receberá um erro de inconsistência de certificado, causando uma falha na conexão.
Configurando Autenticação Baseada em Certificado
Neste momento, você já deve ter um ouvinte WinRM configurado para usar HTTPS. Se sim, você também pode usar um certificado de autenticação de usuário para autenticar como um usuário local no servidor remoto. Usar um certificado de usuário é um dos métodos mais seguros, mas leva um tempo para ser configurado. Você verá que também é muito trabalho repetido, já que cada certificado é único para a máquina cliente individual.
A autenticação baseada em certificado só funciona com contas de usuário local e não com usuários de domínio.
Supondo que você tenha solicitado um certificado para Autenticação do Cliente conforme abordado na seção Criando a Solicitação de Certificado, continue lendo:
Habilitando a Autenticação por Certificado e Mapeando o Usuário no Servidor
- No servidor, execute o comando
Set-Item
para permitir autenticação baseada em certificado.
2. Em seguida, execute Get-ChildItem
para verificar o repositório de Autoridades de Certificação Raiz Confiáveis e encontrar a impressão digital do CA que emitiu o certificado de autenticação do cliente. Para isso, filtre os certificados pelo assunto que contém o nome do seu CA.
3. Execute o comando abaixo onde o Nome do Assunto
é o assunto do certificado do usuário que você forneceu ao criar o certificado.
A Impressão Digital do CA
é a impressão digital do CA coletada com o comando anterior e, em seguida, são solicitadas as credenciais do usuário local que serão usadas para autenticação baseada em certificado.
Testando a Autenticação Baseada em Certificado
Agora que o mapeamento de certificado para usuário está configurado, use o certificado na máquina do cliente para autenticar sem fornecer credenciais.
No cliente em PowerShell, obtenha a impressão digital do certificado do cliente olhando no repositório de certificados pessoais.
Agora especifique a impressão digital no parâmetro Impressão Digital do Certificado
para um comando PSRemoting como abaixo.
Observe que, uma vez que a autenticação baseada em certificado só é utilizável com um ouvinte HTTPS, o uso de SSL é implícito, ao contrário de outros métodos de autenticação onde você precisa especificar o uso de SSL.
Próximos Passos
Agora que você aprendeu como configurar o WinRM sobre SSL, saiba mais sobre o PSRemoting em nosso post PowerShell Remoting: O Guia Definitivo!
Quer aprender mais sobre o PowerShell em geral, incluindo muitas informações sobre PSRemoting? Confira PowerShell para Administradores de Sistemas, o livro!