Provisionar o Windows Device Portal com um certificado SSL personalizado

O Portal de Dispositivos Windows (WDP) fornece uma forma para os administradores de dispositivos instalarem um certificado personalizado para utilização em comunicações HTTPS.

Embora possa fazer isto no seu próprio PC, esta funcionalidade destina-se principalmente a empresas que já possuem uma infraestrutura de certificados.

Por exemplo, uma empresa pode ter uma autoridade certificadora (CA) que utiliza para assinar certificados para sites intranet servidos via HTTPS. Esta funcionalidade assenta sobre essa infraestrutura.

Descrição geral

Por defeito, o WDP gera uma CA raiz autoassinada e depois usa essa para assinar certificados SSL para cada endpoint onde está a ouvir. Isto inclui localhost, 127.0.0.1, e ::1 (localhost IPv6).

Também estão incluídos o nome de host do dispositivo (por exemplo, https://LivingRoomPC) e cada endereço IP local de ligação atribuído ao dispositivo (até dois [IPv4, IPv6] por adaptador de rede). Pode ver os endereços IP locais de ligação de um dispositivo consultando a ferramenta de Rede no WDP. Começam com 10. ou 192. para IPv4, ou fe80: para IPv6.

Na configuração padrão, pode aparecer um aviso de certificado no seu navegador devido à CA raiz não confiável. Especificamente, o certificado SSL fornecido pelo WDP é assinado por uma CA raiz em que o navegador ou PC não confiam. Isto pode ser corrigido criando uma nova CA raiz de confiança.

Criar uma autoridade de certificação raiz

Isto só deve ser feito se a sua empresa (ou casa) não tiver uma infraestrutura de certificação configurada, e só deve ser feito uma vez. Execute este script numa linha de comandos PowerShell elevada (administrador), porque escreve no LocalMachine\My arquivo de certificados. O script cria uma CA raiz chamada WdpTestCA.cer. Instalar este ficheiro nas Autoridades de Certificação Raiz Confiável da máquina local fará com que o seu dispositivo confie em certificados SSL assinados por esta CA raiz. Podes (e deves) instalar este ficheiro .cer em cada PC ao qual queres ligar o 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 AC de raiz passa agora a estar em LocalMachine\My (com a sua chave privada). O WdpTestCA.cer exportado é o certificado público que instala nas Autoridades de Certificação Raiz Confiáveis em cada PC ligado.

Crie um certificado SSL com a CA raiz

Os certificados SSL têm duas funções críticas: proteger a sua ligação através de encriptação e verificar se está realmente a comunicar com o endereço apresentado na barra do navegador (Bing.com, 192.168.1.37, etc.) e não com um terceiro malicioso.

O seguinte script PowerShell cria um certificado SSL para o localhost endpoint. Cada endpoint onde o WDP escuta necessita do seu próprio certificado; Podes substituir o $IssuedTo argumento no script por cada um dos diferentes endpoints do teu dispositivo: o nome do host, localhost e os endereços IP. Este script também requer uma linha de comandos do PowerShell em modo elevado. O Get-ChildItem filtro usa o mesmo CN (PickAName) que escolheste no passo 1 — mantém-nos 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 tiveres vários dispositivos, podes reutilizar os ficheiros .pfx do localhost, mas ainda assim terás de criar certificados de endereço IP e nome de host para cada dispositivo separadamente.

Quando o pacote de ficheiros .pfx for gerado, terá de carregá-los no WDP.

Provisionar o Portal de Dispositivos Windows com a(s) certificação(ões)

Para cada ficheiro .pfx que criaste para um dispositivo, terás de executar o seguinte comando a partir de um prompt de comandos elevado.

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

Veja abaixo como 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

Sugestão

Os endereços IP podem mudar ao longo do tempo. Muitas redes usam DHCP para fornecer endereços IP, por isso os dispositivos nem sempre recebem o mesmo endereço IP que tinham antes. Se criou um certificado para um endereço IP num dispositivo e o endereço desse dispositivo mudou, o WDP gerará um novo certificado usando o certificado auto-assinado existente, e deixará de usar o que criou. Isto fará com que a página de aviso de certificação volte a aparecer no seu navegador. Por esse motivo, recomendamos que estabeleça ligação aos seus dispositivos através dos nomes de anfitrião, que pode definir no Portal de Dispositivos do Windows. Estas manter-se-ão iguais independentemente dos endereços IP.

Consulte também