Utilizar um certificado TLS/SSL no código no Serviço de Aplicações do Azure

No código da aplicação, pode aceder aos certificados públicos ou privados que adicionar ao Serviço de Aplicações. O código da aplicação pode funcionar como cliente e aceder a um serviço externo que necessite de autenticação de certificados ou poderá ter de executar tarefas criptográficas. Este guia de procedimentos mostra como utilizar certificados públicos ou privados no código da aplicação.

Esta abordagem à utilização de certificados no código utiliza a funcionalidade TLS no Serviço de Aplicações, o que requer que a sua aplicação esteja no escalão Básico ou superior. Se a sua aplicação estiver no escalão Gratuito ou Partilhado , pode incluir o ficheiro de certificado no repositório de aplicações.

Quando permite Serviço de Aplicações gerir os certificados TLS/SSL, pode manter os certificados e o código da aplicação separadamente e salvaguardar os seus dados confidenciais.

Pré-requisitos

Para seguir este guia de procedimentos:

Localizar o thumbprint

Na portal do Azure, no menu esquerdo, selecioneNome> da aplicação dos Serviços aplicacionais<>.

No painel de navegação esquerdo da sua aplicação, selecione Definições de TLS/SSL e, em seguida, selecione Certificados de Chave Privada (.pfx) ou Certificados de Chave Pública (.cer).

Localize o certificado que pretende utilizar e copie o thumbprint.

Copiar o thumbprint do certificado

Tornar o certificado acessível

Para aceder a um certificado no código da aplicação, adicione o thumbprint à definição da aplicação WEBSITE_LOAD_CERTIFICATES ao executar o seguinte comando no Cloud Shell:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_CERTIFICATES=<comma-separated-certificate-thumbprints>

Para tornar todos os certificados acessíveis, defina o valor como *.

Nota

Quando WEBSITE_LOAD_CERTIFICATES está definido *, todos os certificados adicionados anteriormente estão acessíveis ao código da aplicação. Se adicionar um certificado à sua aplicação mais tarde, reinicie a aplicação para tornar o novo certificado acessível à sua aplicação. Para obter mais informações, veja Ao atualizar (renovar) um certificado.

Carregar certificado em aplicações do Windows

A WEBSITE_LOAD_CERTIFICATES definição da aplicação torna os certificados especificados acessíveis para a sua aplicação alojada no Windows no arquivo de certificados do Windows, em Utilizador Atual\O Meu.

No código C#, pode aceder ao certificado através do thumbprint do certificado. O código seguinte carrega um certificado com o thumbprint E661583E8FABEF4C0BEF694CBC41C28FB81CD870.

using System;
using System.Linq;
using System.Security.Cryptography.X509Certificates;

string certThumbprint = "E661583E8FABEF4C0BEF694CBC41C28FB81CD870";
bool validOnly = false;

using (X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
  certStore.Open(OpenFlags.ReadOnly);

  X509Certificate2Collection certCollection = certStore.Certificates.Find(
                              X509FindType.FindByThumbprint,
                              // Replace below with your certificate's thumbprint
                              certThumbprint,
                              validOnly);
  // Get the first cert with the thumbprint
  X509Certificate2 cert = certCollection.OfType<X509Certificate2>().FirstOrDefault();

  if (cert is null)
      throw new Exception($"Certificate with thumbprint {certThumbprint} was not found");

  // Use certificate
  Console.WriteLine(cert.FriendlyName);
  
  // Consider to call Dispose() on the certificate after it's being used, avaliable in .NET 4.6 and later
}

No código Java, pode aceder ao certificado a partir do arquivo "Windows-MY" com o campo Nome Comum do Requerente (consulte Certificado de chave pública). O código seguinte mostra como carregar um certificado de chave privada:

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.PrivateKey;

...
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null); 
Certificate cert = ks.getCertificate("<subject-cn>");
PrivateKey privKey = (PrivateKey) ks.getKey("<subject-cn>", ("<password>").toCharArray());

// Use the certificate and key
...

Para idiomas que não suportam ou oferecem suporte insuficiente para o arquivo de certificados do Windows, consulte Carregar o certificado do ficheiro.

Carregar o certificado do ficheiro

Se precisar de carregar um ficheiro de certificado que carrega manualmente, é melhor carregar o certificado com FTPS em vez do Git, por exemplo. Deve manter os dados confidenciais, como um certificado privado, fora do controlo de origem.

Nota

ASP.NET e ASP.NET Core no Windows têm de aceder ao arquivo de certificados, mesmo que carregue um certificado a partir de um ficheiro. Para carregar um ficheiro de certificado numa aplicação .NET do Windows, carregue o perfil de utilizador atual com o seguinte comando no Cloud Shell:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_USER_PROFILE=1

Esta abordagem à utilização de certificados no código utiliza a funcionalidade TLS no Serviço de Aplicações, o que requer que a sua aplicação esteja no escalão Básico ou superior.

O exemplo C# seguinte carrega um certificado público a partir de um caminho relativo na sua aplicação:

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;

...
var bytes = File.ReadAllBytes("~/<relative-path-to-cert-file>");
var cert = new X509Certificate2(bytes);

// Use the loaded certificate

Para ver como carregar um certificado TLS/SSL a partir de um ficheiro no Node.js, PHP, Python, Java ou Ruby, veja a documentação da respetiva linguagem ou plataforma Web.

Carregar o certificado em contentores do Linux/Windows

As WEBSITE_LOAD_CERTIFICATES definições da aplicação tornam os certificados especificados acessíveis para os seus contentores personalizados do Windows ou Linux (incluindo contentores linux incorporados) como ficheiros. Os ficheiros encontram-se nos seguintes diretórios:

Plataforma de contentor Certificados públicos Certificados privados
Contentor do Windows C:\appservice\certificates\public C:\appservice\certificates\private
Contentor do Linux /var/ssl/certs /var/ssl/private

Os nomes dos ficheiros de certificado são os thumbprints do certificado.

Nota

Serviço de Aplicações injetar os caminhos do certificado em contentores do Windows como as seguintes variáveis WEBSITE_PRIVATE_CERTS_PATHde ambiente , WEBSITE_INTERMEDIATE_CERTS_PATH, WEBSITE_PUBLIC_CERTS_PATHe WEBSITE_ROOT_CERTS_PATH. É melhor referenciar o caminho do certificado com as variáveis de ambiente em vez de codificar o caminho do certificado, caso os caminhos do certificado mudem no futuro.

Além disso, os contentores do Windows Server Core carregam automaticamente os certificados para o arquivo de certificados, em LocalMachine\My. Para carregar os certificados, siga o mesmo padrão que Carregar certificado nas aplicações do Windows. Para contentores baseados no Windows Nano, utilize os caminhos de ficheiro fornecidos acima para Carregar o certificado diretamente a partir do ficheiro.

O seguinte código C# mostra como carregar um certificado público numa aplicação do Linux.

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;

...
var bytes = File.ReadAllBytes("/var/ssl/certs/<thumbprint>.der");
var cert = new X509Certificate2(bytes);

// Use the loaded certificate

O seguinte código C# mostra como carregar um certificado privado numa aplicação do Linux.

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
...
var bytes = File.ReadAllBytes("/var/ssl/private/<thumbprint>.p12");
var cert = new X509Certificate2(bytes);

// Use the loaded certificate

Para ver como carregar um certificado TLS/SSL a partir de um ficheiro no Node.js, PHP, Python, Java ou Ruby, veja a documentação da respetiva linguagem ou plataforma Web.

Ao atualizar (renovar) um certificado

Quando renova um certificado e o adiciona à sua aplicação, este obtém um novo thumbprint, que também tem de ser tornado acessível. A forma como funciona depende do tipo de certificado.

Se carregar manualmente o certificado público ou privado :

  • Se listar thumbprints explicitamente no WEBSITE_LOAD_CERTIFICATES, adicione o novo thumbprint à definição da aplicação.
  • Se WEBSITE_LOAD_CERTIFICATES estiver definido como *, reinicie a aplicação para tornar o novo certificado acessível.

Se renovar um certificado no Key Vault, como com um certificado de Serviço de Aplicações, a sincronização diária do Key Vault efetua automaticamente a atualização necessária ao sincronizar a sua aplicação com o certificado renovado.

  • Se WEBSITE_LOAD_CERTIFICATES contiver o thumbprint antigo do certificado renovado, a sincronização diária atualiza automaticamente o thumbprint antigo para o novo thumbprint.
  • Se WEBSITE_LOAD_CERTIFICATES estiver definido como *, a sincronização diária torna o novo certificado acessível automaticamente.

Mais recursos