Provisionar o Portal de Dispositivos do Windows com um certificado SSL personalizado

Windows O WDP (Device Portal) fornece uma maneira para os administradores de dispositivos instalarem um certificado personalizado para uso na comunicação HTTPS.

Embora você possa fazer isso em seu próprio computador, esse recurso destina-se principalmente a empresas que têm uma infraestrutura de certificado existente em vigor.

Por exemplo, uma empresa pode ter uma AC (autoridade de certificação) que usa para assinar certificados para sites da intranet atendidos por HTTPS. Além disso, esse recurso funciona sobre essa infraestrutura.

Overview

Por padrão, o WDP gera uma CA raiz autoassinada e, em seguida, usa essa CA para assinar os certificados SSL de cada endpoint no qual ele está ouvindo. Isso inclui localhost, 127.0.0.1e ::1 (localhost IPv6).

Também estão incluídos o nome do host do dispositivo (por exemplo) https://LivingRoomPCe cada endereço IP local de link atribuído ao dispositivo (até dois [IPv4, IPv6] por adaptador de rede). Você pode ver os endereços IP de link local de um dispositivo consultando a ferramenta Rede no WDP. Eles começarão com 10. ou 192. para IPv4 ou fe80: para IPv6.

Na configuração padrão, um aviso de certificado pode aparecer no navegador devido à AC raiz não confiável. Especificamente, o certificado SSL fornecido pelo WDP é assinado por uma autoridade certificadora raiz na qual o navegador ou o PC não confia. Isso pode ser corrigido com a criação de uma nova CA raiz confiável.

Criar uma autoridade de certificação raiz

Isso só deve ser feito se sua empresa (ou casa) não tiver uma infraestrutura de certificado configurada e só deve ser feita uma vez. Execute esse script de um prompt do PowerShell com privilégios elevados (admin) porque ele grava no repositório de certificados LocalMachine\My. O script cria uma AC raiz chamada WdpTestCA.cer. A instalação desse arquivo nas autoridades de certificação raiz confiáveis do computador local fará com que o dispositivo confie nos certificados SSL assinados por essa AC raiz. Você pode (e deve) instalar esse arquivo .cer em cada computador que deseja conectar ao WDP.

$CN = "PickAName"
$OutputPath = "c:\temp\"

# Create root certificate authority (marked as a CA via Basic Constraints)
$FilePath = $OutputPath + "WdpTestCA.cer"
$Subject = "CN=" + $CN
$rootCA = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -Subject $Subject -HashAlgorithm "SHA512" -KeyUsage CertSign,CRLSign -TextExtension @("2.5.29.19={critical}{text}CA=true")
$rootCAFile = Export-Certificate -Cert $rootCA -FilePath $FilePath

A CA raiz agora fica em LocalMachine\My (com sua chave privada). O WdpTestCA.cer exportado é o certificado público que você instala em Autoridades de Certificação Raiz Confiáveis em cada computador conectado.

Criar um certificado SSL com a AC raiz

Os certificados SSL têm duas funções críticas: proteger sua conexão por meio da criptografia e verificar se você está realmente se comunicando com o endereço exibido na barra do navegador (Bing.com, 192.168.1.37 etc.) e não um terceiro mal-intencionado.

O script de PowerShell a seguir cria um certificado SSL para o ponto de extremidade localhost. Cada endpoint em que o WDP escuta precisa de seu próprio certificado; você pode substituir o argumento $IssuedTo no script por cada um dos diferentes endpoints do seu dispositivo: o nome do host, localhost e os endereços IP. Esse script também requer um prompt do PowerShell com privilégios elevados. O Get-ChildItem filtro usa o mesmo CN (PickAName) que você escolheu na etapa 1 – mantenha-os sincronizados.

$IssuedTo = "localhost"
$Password = "PickAPassword"
$OutputPath = "c:\temp\"

# Retrieve the root CA (with its private key) from the store where it was created.
# Match the CN you used above.
$rootCA = Get-ChildItem -Path cert:\localmachine\my | Where-Object { $_.Subject -eq "CN=PickAName" -and $_.HasPrivateKey } | Select-Object -First 1

# Create SSL cert signed by certificate authority
$IssuedToClean = $IssuedTo.Replace(":", "-").Replace(" ", "_")
$FilePath = $OutputPath + $IssuedToClean + ".pfx"
$Subject = "CN=" + $IssuedTo
$cert = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -Subject $Subject -DnsName $IssuedTo -Signer $rootCA -HashAlgorithm "SHA512"
$certFile = Export-PfxCertificate -cert $cert -FilePath $FilePath -Password (ConvertTo-SecureString -String $Password -Force -AsPlainText)

Se você tiver vários dispositivos, poderá reutilizar os arquivos .pfx localhost, mas ainda precisará criar certificados de endereço IP e nome de host para cada dispositivo separadamente.

Quando o pacote de arquivos .pfx for gerado, você precisará carregá-los no WDP.

Configurar o Windows Device Portal com o(s) certificado(s)

Para cada arquivo .pfx criado para um dispositivo, você precisará executar o comando a seguir em um prompt de comando com privilégios elevados.

WebManagement.exe -SetCert <Path to .pfx file> <password for pfx>

Veja abaixo o exemplo de uso:

WebManagement.exe -SetCert localhost.pfx PickAPassword
WebManagement.exe -SetCert --1.pfx PickAPassword
WebManagement.exe -SetCert MyLivingRoomPC.pfx PickAPassword

Depois de instalar os certificados, reinicie o serviço para que as alterações possam entrar em vigor:

sc stop webmanagement
sc start webmanagement

Tip

Os endereços IP podem ser alterados ao longo do tempo. Muitas redes usam DHCP para distribuir endereços IP, para que os dispositivos nem sempre obtenham o mesmo endereço IP que tinham anteriormente. Se você tiver criado um certificado para um endereço IP em um dispositivo e o endereço desse dispositivo tiver sido alterado, o WDP gerará um novo certificado usando o certificado autoassinado existente e ele deixará de usar o que você criou. Isso fará com que a página de aviso do certificado apareça no navegador novamente. Por esse motivo, recomendamos conectar-se aos seus dispositivos por meio de seus nomes de host, que você pode definir no Portal do Dispositivo Windows. Elas permanecerão as mesmas independentemente dos endereços IP.

Consulte também