Adam the Automator

se você já estiver executando comandos remotos com PowerShell Remoting (PSRemoting), você sabe o quão conveniente é o recurso. Você pode se conectar a um ou mais computadores remotos e gerenciá-los como se fossem locais. PSRemoting depende do Windows Remote Management (WinRm) para fazer isso acontecer, e se você não estiver usando WinRM sobre SSL, você pode estar se abrindo para alguns problemas de segurança.

neste tutorial, você vai aprender como configurar o Windows no cliente e no servidor para usar o WinRM através de HTTPS (SSL) e como usar certificados para autenticar quando usando o WinRM através de HTTPS.

Tabela de Conteúdo

pré-Requisitos

Se você gostaria de seguir junto com este tutorial passo a passo, certifique-se de que você tem o seguinte:

  • Windows 7+ ou Server 2008 R2 máquina para servir como máquina cliente. Este tutorial usará o Windows 10.
  • uma máquina Windows 7+ ou Server 2008 R2+ para servir como a máquina do servidor. Este tutorial usará o Windows Server 2019.
  • acesso a uma conta administrativa local ou a uma conta com direitos administrativos locais nas máquinas cliente e servidor.
  • uma infraestrutura De Chave Pública (PKI) do Active Directory Certificate Services (ADCS) configurada. Isso ajudaria se você implementasse ADCS para implementações de produção, mas é opcional para este tutorial e teste. O tutorial assumirá que o PKI está configurado como uma empresa ou CA independente.

por que usar WinRM sobre SSL?

PSRemoting, fora da caixa, usa WinRM e permite gerenciar máquinas clientes remotamente. Depois que o PSRemoting estabelece uma sessão sobre o WinRM, ele criptografa toda a comunicação de cliente para servidor. Além disso, o procedimento de configuração para implementar PSRemoting sem HTTPS é bastante simples.

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 usado.

uma das maneiras mais fáceis de tornar o PSRemoting mais seguro é usar WinRM sobre HTTPS em vez de HTTP. HTTPS encerra todo o seu fluxo de conexão, incluindo autenticação dentro da camada de criptografia que o WinRM já usa. HTTPS também fornece simultaneamente uma maneira de validar o servidor ao qual você está se conectando é o que você acha que é.

configurando o WinRM com um certificado autoassinado

vamos agora entrar nas manifestações. Para o primeiro truque, você vai aprender como configurar criptografar a comunicação PSRemoting com WinRm sobre SSL por meio de um certificado autoassinado.

usar um certificado autoassinado é uma ótima maneira de configurar um ambiente de teste sem se preocupar com um PKI como ADCS. Quando você usa um certificado autoassinado, gera um certificado que o próprio servidor assina, o que basicamente garante a si mesmo.

existem certificados para executar duas tarefas normalmente; autenticar uma conexão e criptografá-la. Usar um certificado autoassinado implementa apenas o último. Para validar a identidade de um servidor, você deve sempre usar certificados fornecidos pelo PKI. Os certificados fornecidos pelo PKI fornecem uma única fonte de confiança vs. ter que confiar em cada certificado autoassinado individualmente manualmente.

configurar o WinRM sobre SSL com um certificado autoassinado requer quatro etapas de alto nível:

  1. criando o certificado autoassinado na máquina de destino.
  2. configurando o servidor Web WinRM (listener) do servidor para usar o certificado autoassinado para Autenticação.
  3. abrindo as portas apropriadas no firewall do Windows da máquina de destino.
  4. executando um comando para iniciar uma conexão remota no cliente usando um cmdlet PowerShell como Enter-PSSession.

vamos agora passar por cada passo.

Criando um certificado autoassinado

o primeiro passo é gerar um certificado autoassinado no servidor. Ao se conectar, o PSRemoting usará esse certificado para criptografar todas as comunicações.

enquanto estiver no ServerB com um console do Windows PowerShell aberto como administrador, execute o cmdlet New-SelfSignedCertificate como mostrado abaixo. Executar o comando abaixo gera um certificado para ServerB.domain.com na loja de certificados pessoais da máquina local.

New-SelfSignedCertificate -Subject 'CN=ServerB.domain.com' -TextExtension '2.5.29.37={text}1.3.6.1.5.5.7.3.1'
criando certificado autoassinado.
criando certificado autoassinado.

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 que o servidor esteja em um grupo de trabalho, sempre forneça um nome de domínio, por exemplo, domain.com ou laboratório.local. Ao se conectar à máquina de destino, o nome DNS ao qual você se conecta deve corresponder exatamente a esse nome de assunto, pois a conexão falhará.

o TextExtension permite definir 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.

após a execução de New-SelfSignedCertificates, ele retornará a impressão digital do certificado gerado. Salve isso, pois você precisará dele para o próximo comando.

configurando o ouvinte WinRM

depois de criar o certificado autoassinado no servidor, configure o ouvinte WinRm para começar a usar esse certificado para Autenticação. Para fazer isso, use o comando winrm create como mostrado abaixo.

O Address=* no comando abaixo informa o ouvinte para ouvir 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 <cert thumbprint here> pela impressão digital retornada na última etapa.

winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname="ServerB.domain.com"; CertificateThumbprint="<cert thumbprint here>"}'
criando o ouvinte WinRM com certificado autoassinado.
criando o ouvinte WinRM com certificado autoassinado.

abrindo a porta do Firewall WinRM SSL

em seguida, se você usar o firewall do Windows, terá que permitir que o tráfego HTTPS entre no servidor pela porta HTTPS padrão 5986.

abra a porta do firewall para WinRM sobre HTTPS usando o PowerShell executando o comando abaixo.

$FirewallParam = @{ DisplayName = 'Windows Remote Management (HTTPS-In)' Direction = 'Inbound' LocalPort = 5986 Protocol = 'TCP' Action = 'Allow' Program = 'System'}New-NetFirewallRule @FirewallParam

conectando-se ao servidor por SSL

agora você configurou o servidor windows remoto para aceitar conexões WinRM por SSL. Neste momento, volte para o cliente e inicie qualquer comando PSRemoting que você gostaria de testar. Por exemplo, você pode tentar o cmdlet Enter-PSSession ou Invoke-Command . Só agora, você se conecta um pouco diferente do que com a conexão HTTP padrão.

a conexão via HTTPS normalmente requer um único parâmetro UseSSL. Este parâmetro diz ao comando para procurar um ouvinte HTTPS WinRM vs. um ouvinte HTTP como faria por padrão. O parâmetro UseSSL está disponível em Mais Comandos PSRemoting.

para testes, execute Enter-PSSession fornecendo o FQDN do servidor conforme definido pelo assunto do certificado autoassinado, um objeto PSCredential para definir o nome de usuário e a senha e, finalmente, o parâmetro switch UseSSL.

Enter-PSSession -ComputerName ServerB.domain.com -Credential (Get-Credential) -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 tentar se autenticar 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 pode seguir e falha.

falha na verificação de confiança da Autoridade de Certificação com certificado autoassinado.
falha na verificação de confiança da Autoridade de Certificação com certificado autoassinado.

para se conectar ao servidor com um certificado autoassinado, você deve substituir a verificação de confiança do certificado. Você pode fazer isso criando uma PSSessionOption chamada SkipCACheck usando o cmdlet New-PSSessionOption e passando-o para o comando conforme mostrado abaixo.

$PSSessionOption = New-PSSessionOption -SkipCACheckEnter-PSSession -ComputerName ServerB -Credential (Get-Credential) -SessionOption $PSSessionOption -UseSSL

você pode definir muitos objetos PSSessionOption diferentes para adicionar opções para sua conexão remota que não estão incluídas no cmdlet Enter-PSSession diretamente.

tente se conectar novamente e o PowerShell deve solicitar credenciais. Uma vez fornecido, agora você deve se conectar ao servidor com WinRM sobre SSL!

configurando o WinRM com um certificado assinado pela CA

se você pretende usar o PSRemoting usando o WinRM na produção e deseja permanecer o mais seguro possível, você precisa se concentrar no WinRM sobre o SSL usando um certificado assinado pela Autoridade de certificação (CA).Os certificados assinados pela 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ê estiver em um ambiente do 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 vai assumir que você já tem ADCS configurar e trabalhar em seu ambiente.

para uma configuração rápida, você pode seguir a documentação da Microsoft, mas para uma implantação de produção, você deve pesquisar a configuração fortemente, pois uma autoridade de certificação está no centro dos esforços de criptografia de uma organização.

criando a solicitação de certificado

a primeira etapa no uso de um certificado emitido pela CA é 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 gerado, este CSR pode então ser enviado ao CA para emitir o certificado.

as etapas desta seção funcionarão nas implantações do ADCS quando for uma CA corporativa ou uma CA autônoma. Se você estiver usando uma CA Corporativa Integrada a anúncios, poderá agilizar a inscrição de certificados sem passar pelas etapas nesta seção Usando modelos de inscrição automática de certificados ou certificados.

enquanto estiver no servidor (ServerB neste tutorial), crie o CSR:

  1. executar certlm.msc para abrir o Gerenciador de certificados do Windows.

2. Clique com o botão direito do mouse 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 de Informações do certificado vista abaixo. Quando chegar aqui, clique no menu suspenso detalhes e selecione Propriedades.

criando uma solicitação de certificado personalizada.
criando uma solicitação de certificado personalizada.

4. Clique na guia assunto e altere o tipo para Nome Comum.

5. Agora digite o nome de domínio totalmente qualificado do servidor se ele estiver conectado a um domínio ou apenas ao nome do host se não estiver e clique em Adicionar.

especificando assunto para solicitação de certificado.
especificando assunto para solicitação de certificado.

observe que, para uso com um ouvinte WinRM SSL, você deve usar o nome comum. As outras opções na lista podem ser incluídas, mas não são necessárias para essa implantação.

6. Clique na guia extensão.

7. Se você não estiver usando autenticação baseada em certificado que será coberta mais tarde, expanda o cabeçalho de uso de chave estendida e adicione autenticação de 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 de cliente, assinatura de código e criptografia de documentos.

8. Se você quiser configurar a autenticação baseada em certificado, certifique-se de escolher a autenticação do Cliente, conforme mostrado abaixo.

solicitando um certificado de autenticação do cliente.
solicitando um certificado de autenticação do cliente.

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 Propriedades do certificado e salve suas configurações clicando em OK e clique em Avançar para continuar com os prompts.

11. Agora forneça um caminho para gerar a solicitação de certificado, onde você pode recuperá-la mais tarde e clicar em Concluir.

uma vez concluído, você deve ter um arquivo de solicitação de certificado.

solicitando um certificado

depois de criar a solicitação, você precisará enviar essa solicitação à sua CA, que gerará o certificado. Para fazer isso:

  1. navegue até o seu servidor ADCS em http://<server nome FQDN>/certsrv / certrqxt.aspide.

página da web de envio de solicitação de certificado.
página da web de envio de solicitação de certificado.

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 na caixa de solicitação. Nada é necessário para Atributos Adicionais para este certificado.

3. Clique Em Enviar. Isso enviará sua solicitação à CA. Em seguida, ele deve mostrar o ID da solicitação, que será necessário mais tarde. Salva isto! Vais precisar mais tarde.

4. Agora conecte-se ao servidor CA que faz parte do seu ambiente ADCS usando o Gerenciador de certificados do Windows em seu computador local ou via RDP executando certsrv.mestrado.

5. Clique em solicitações pendentes.

emissão de certificado de solicitação pendente.
emissão de certificado de solicitação pendente.

6. Clique com o botão direito do mouse na solicitação pendente, clique em todas as tarefas e clique em problema. Isso aprovará a solicitação que você acabou de enviar com base no ID da solicitação da etapa anterior.

registrando o certificado

agora que você emitiu um certificado na CA, é hora de inscrever o certificado no servidor em que você está configurando o WinRM. Fazer:

  1. do servidor em que você está configurando o WinRM por SSL, navegue até http://<server nome FQDN > /certckpn.aspide. Você deve ver uma única solicitação de certificado pendente.
visualizando o status da solicitação de certificado pendente.
visualizando o status da solicitação de certificado pendente.

você pode recuperar o certificado público de uma máquina diferente, se necessário, mas a partir do servidor que você está configurando para WinRM sobre HTTPS simplifica o processo.

2. Selecione a solicitação que Você enviou da lista e baixe a cadeia de certificados. Você deve baixar toda a cadeia de certificados se o servidor que você está configurando WinRM sobre HTTPS tem sua CA como um servidor raiz.

download da cadeia de certificados.
cadeia de certificados de download.

3. Abra o arquivo da cadeia de certificados. Você deve ver um certificado para o seu servidor e quaisquer certificados de Autoridade de certificação superiores na cadeia. Abaixo win2.laboratorio.int é o certificado solicitado, e WIN2-CA é o certificado para a CA que emitiu o certificado para win2.lab.int.

mostrando certificados dentro da cadeia de certificados.
mostrando certificados dentro da cadeia de certificados.

4. Clique duas vezes em um dos certificados e, na caixa que se abre, clique no botão Instalar Certificado. Como esse certificado será usado pelo servidor e não por um usuário específico, altere a opção para máquina Local.

importando o certificado no armazenamento local do certificado da máquina.
importando o certificado na loja local do certificado da máquina.

5. Continue pelo prompt deixando tudo como padrão. Os padrões devem colocar o certificado no armazenamento de certificações Raiz Confiáveis.

6. Agora repita as etapas 3-5 para cada um dos outros certificados da 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.

crie e configure o ouvinte HTTPS WinRM

agora que todos os certificados estão instalados, é hora de configurar o WinRM em seu servidor para usar esse certificado para o ouvinte.

com o PowerShell Aberto no servidor WinRm:

  1. execute o comando abaixo para configurar o ouvinte WinRm automaticamente. O comando winrm faz isso pesquisando no armazenamento de certificados de máquina local um certificado que corresponda aos requisitos do WinRM.
winrm quickconfig -transport:https

2. O Firewall do Windows bloqueará a porta HTTPS WinRM de 5986 por padrão. Para garantir que o firewall permita a porta de entrada 5986, execute o seguinte comando PowerShell:

$FirewallParam = @{ DisplayName = 'Windows Remote Management (HTTPS-In)' Direction = 'Inbound' LocalPort = 5986 Protocol = 'TCP' Action = 'Allow' Program = 'System' } New-NetFirewallRule @FirewallParam

testando a conexão WinRM SSL

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.

Enter-PSSession -ComputerName ServerB.domain.com -UseSSL -Credential (Get-Credential)

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 incompatibilidade de certificado causando uma falha de conexão.

configurando autenticação baseada em certificado

até agora, você já deve ter um ouvinte WinRM configurado para usar HTTPS. Nesse caso, 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 mais seguros, mas demora um pouco para configurar. Você descobrirá que também é muito trabalho repetido, pois cada certificado é exclusivo da máquina cliente individual.

a autenticação baseada em certificado só funciona com contas de usuário locais e não com usuários de domínio.

Supondo que você solicitou um certificado para a Autenticação de Cliente como cobertos em Criar o Pedido de Certificado de seção, leia em:

Activar Certificado de Autenticação e de Mapeamento de Usuário no Servidor

  1. No servidor, execute o Set-Item comando para permitir a autenticação baseada em certificado.
Set-Item WSMan:\localhost\Service\Auth\Certificate -Value $true

2. Em seguida, execute Get-ChildItem para examinar o armazenamento de autoridades de Certificação Raiz Confiáveis para encontrar a impressão digital da CA que emitiu o certificado de autenticação do cliente. Para fazer isso, filtre os certificados pelo assunto que contém o nome da sua CA.

Get-ChildItem Cert:\LocalMachine\Root | Where-Object {$_.Subject -like 'CA-Name'}

3. Execute o comando abaixo, onde o SubjectName é o assunto do certificado de usuário que você forneceu quando criou o certificado

O CAThumbprint é o da autoridade de impressão digital coletada com o comando anterior, e, em seguida, será solicitado para credenciais são o nome de usuário e a senha do usuário local que será utilizado para a autenticação baseada em certificado.

New-Item WSMan:\localhost\ClientCertificate -Subject SubjectName -URI * -Issuer CAThumbprint -Credential (Get-Credential)

testando autenticação baseada em certificado

agora que o certificado para mapeamento de usuário está configurado, use o certificado na máquina cliente para autenticar sem fornecer credenciais.

no cliente no PowerShell, obtenha a impressão digital do certificado do cliente procurando no armazenamento de Certificados Pessoais.

Get-ChildItem Cert:\CurrentUser\My

agora especifique a impressão digital no parâmetro CertificateThumbprint para um comando PSRemoting como abaixo.

Enter-PSSession -ComputerName ServerName -CertificateThumbprint <Thumbprint>

observe que, como a autenticação baseada em certificado só pode ser usada com um ouvinte HTTPS -UseSSL, está implícita, ao contrário de outros métodos de autenticação nos quais você precisa especificar para usar SSL.

agora que você aprendeu a configurar o WinRM por SSL, saiba mais sobre o PSRemoting em nosso PowerShell Remoting: The Ultimate Guide post!

quer saber mais sobre o PowerShell em geral, incluindo muito sobre PSRemoting? Confira PowerShell para Sysadmins, o livro!

Leave a Reply