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

No código do aplicativo, você pode acessar os certificados públicos ou privados adicionados ao Serviço de Aplicativo. O código do aplicativo pode atuar como um cliente e acessar um serviço externo que exija autenticação de certificado ou pode precisar executar tarefas criptográficas. Este guia de instruções mostra como usar certificados públicos ou privados no código do aplicativo.

Essa abordagem para usar certificados em seu código usa a funcionalidade TLS no Serviço de Aplicativo, que exige que seu aplicativo esteja na camada Básica ou superior. Se o seu aplicativo estiver na camada Gratuito ou Compartilhado , você poderá incluir o arquivo de certificado no repositório do aplicativo.

Ao permitir que o Serviço de Aplicativo gerencie seus certificados TLS/SSL, você pode manter os certificados e o código do aplicativo separadamente e proteger seus dados confidenciais.

Pré-requisitos

Para seguir este guia de instruções:

Encontre a impressão digital

No portal do Azure, no menu à esquerda, selecione Nome> do aplicativo dos Serviços de><Aplicativo.

Na navegação à esquerda da sua aplicação, selecione Certificados e, em seguida, selecione Trazer os seus próprios certificados (.pfx) ou Certificados de chave pública (.cer).

Encontre o certificado que deseja usar e copie a impressão digital.

Copy the certificate thumbprint

Tornar o certificado acessível

Para acessar um certificado no código do aplicativo, adicione sua impressão digital à configuração do WEBSITE_LOAD_CERTIFICATES aplicativo, executando 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 seus certificados acessíveis, defina o valor como *.

Nota

Quando WEBSITE_LOAD_CERTIFICATES é definido *, todos os certificados adicionados anteriormente são acessíveis ao código do aplicativo. Se você adicionar um certificado ao seu aplicativo mais tarde, reinicie o aplicativo para tornar o novo certificado acessível ao seu aplicativo. Para obter mais informações, consulte Ao atualizar (renovar) um certificado.

Carregar certificado em aplicativos do Windows

A WEBSITE_LOAD_CERTIFICATES configuração do aplicativo torna os certificados especificados acessíveis ao seu aplicativo hospedado no Windows no repositório de certificados do Windows, em Usuário Atual\Meu.

No código C#, você acessa o certificado pela impressão digital do certificado. O código a seguir carrega um certificado com a impressão E661583E8FABEF4C0BEF694CBC41C28FB81CD870digital.

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, available in .NET 4.6 and later
}

No código Java, você acessa o certificado do armazenamento "Windows-MY" usando o campo Nome comum da entidade (consulte Certificado de chave pública). O código a seguir 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 armazenamento de certificados do Windows, consulte Carregar certificado do arquivo.

Carregar certificado do arquivo

Se você precisar carregar um arquivo de certificado que você carrega manualmente, é melhor carregar o certificado usando FTPS em vez de Git, por exemplo. Você deve manter dados confidenciais, como um certificado privado, fora do controle do código-fonte.

Nota

ASP.NET e ASP.NET Core no Windows devem acessar o armazenamento de certificados mesmo se você carregar um certificado de um arquivo. Para carregar um arquivo de certificado em um aplicativo Windows .NET, carregue o perfil de usuário 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

Essa abordagem para usar certificados em seu código usa a funcionalidade TLS no Serviço de Aplicativo, que exige que seu aplicativo esteja na camada Básica ou superior.

O exemplo de C# a seguir carrega um certificado público de um caminho relativo em seu aplicativo:

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 arquivo em Node.js, PHP, Python ou Java, consulte a documentação da respetiva linguagem ou plataforma web.

Carregar certificado em contêineres Linux/Windows

A WEBSITE_LOAD_CERTIFICATES configuração do aplicativo torna os certificados especificados acessíveis aos contêineres personalizados do Windows ou Linux (incluindo contêineres Linux integrados) como arquivos. Os arquivos são encontrados nos seguintes diretórios:

Plataforma de contentores 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 arquivos de certificado são as impressões digitais do certificado.

Nota

O Serviço de Aplicativo injeta os caminhos de certificado em contêineres do Windows como as seguintes variáveis WEBSITE_PRIVATE_CERTS_PATHde ambiente , , WEBSITE_INTERMEDIATE_CERTS_PATHWEBSITE_PUBLIC_CERTS_PATHe WEBSITE_ROOT_CERTS_PATH. É melhor fazer referência ao 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 contêineres do Windows Server Core carregam os certificados no armazenamento de certificados automaticamente, em LocalMachine\My. Para carregar os certificados, siga o mesmo padrão de Carregar certificado em aplicativos do Windows. Para contêineres baseados no Windows Nano, use estes caminhos de arquivo Carregue o certificado diretamente do arquivo.

O código C# a seguir mostra como carregar um certificado público em um aplicativo 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 código C# a seguir mostra como carregar um certificado privado em um aplicativo 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 arquivo em Node.js, PHP, Python ou Java, consulte a documentação da respetiva linguagem ou plataforma web.

Ao atualizar (renovar) um certificado

Quando você renova um certificado e o adiciona ao seu aplicativo, ele recebe uma nova impressão digital, que também precisa ser acessível. O seu funcionamento depende do seu tipo de certificado.

Se carregar manualmente o certificado público ou privado :

  • Se você listar impressões digitais explicitamente no WEBSITE_LOAD_CERTIFICATES, adicione a nova impressão digital à configuração do aplicativo.
  • Se WEBSITE_LOAD_CERTIFICATES estiver definido como *, reinicie o aplicativo para tornar o novo certificado acessível.

Se você renovar um certificado no Cofre da Chave, como com um certificado do Serviço de Aplicativo, a sincronização diária do Cofre da Chave fará a atualização necessária automaticamente ao sincronizar seu aplicativo com o certificado renovado.

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

Mais recursos