Partilhar via


Gerir certificados em aplicações de alto nível

A API CertStore permite que uma aplicação de alto nível faça a gestão de certificados para utilização na autenticação de rede. O certificado de dispositivo az sphere permite-lhe gerir certificados a partir da linha de comandos.

Os certificados são armazenados num armazenamento não complicado no dispositivo do Azure Sphere. O arquivo de certificados, ou arquivo de certificados, pode conter até 24 KiB de certificados. O tamanho máximo de um certificado é 8 KiB. Normalmente, os certificados de AC de raiz são maiores do que os certificados de cliente. Além de utilizar o arquivo de certificados, também pode aceder ao certificado de cliente gerido pela Microsoft. O certificado de cliente gerido pela Microsoft só estará disponível para utilização quando o dispositivo estiver ligado à Internet pelo menos uma vez a cada 24 horas.

Utilizar o certificado de cliente gerido pela Microsoft

Utilize estas duas funções para obter um certificado de cliente e determinar se está pronto para ser utilizado.

  • DeviceAuth_GetCertificatePath devolve um caminho de ficheiro para um certificado de cliente gerido pelo SO. Este caminho de ficheiro é exigido por algumas bibliotecas para carregar um certificado para comunicações TLS.

  • Application_IsDeviceAuthReady para verificar se a autenticação do dispositivo para a aplicação atual está pronta.

Requisitos do CertStore

As aplicações que utilizam a API CertStore têm de incluir os ficheiros de cabeçalho adequados e adicionar a capacidade CertStore ao manifesto da aplicação.

Ficheiros de cabeçalho

Inclua o cabeçalho CertStore no projeto:

 #include <applibs\certstore.h>

Definições do manifesto da aplicação

Para utilizar as APIs do arquivo de certificados, tem de adicionar a capacidade de aplicação CertStore ao manifesto da aplicação e definir o valor como true. O tópico de manifesto da aplicação do Azure Sphere tem mais detalhes sobre o manifesto da aplicação.

{
  "SchemaVersion": 1,
  "Name" : "Mt3620App3",
  "ComponentId" : "bb267cbd-4d2a-4937-8dd8-3603f48cb8f6",
  "EntryPoint": "/bin/app",
  "CmdArgs": [],
   "Capabilities": {
    "AllowedConnections": [],
    "AllowedTcpServerPorts": [],
    "AllowedUdpServerPorts": [],
    "CertStore" : true,
    "Gpio": [],
    "Uart": [],
    "EnterpriseWifiConfig": true,
    "WifiConfig": true,
    "NetworkConfig": false,
    "SystemTime": true
  }
}

IDs de Certificado

Cada certificado está associado a um identificador de certificado (ID). O ID do certificado é uma cadeia de 1 a 16 carateres que identifica exclusivamente o certificado no dispositivo. Os carateres válidos são 'a'-'z', 'A'-'Z', '0'-'9', hífen (-). e caráter de sublinhado (_). Cada ID de certificado tem de ser exclusivo em todo o dispositivo, independentemente do tipo de certificado que identificar.

O identificador de cada certificado é guardado no arquivo de certificados e é utilizado em todo o dispositivo: pela API CertStore , pela API WifiConfig e pela extensão da CLI do Azure. Consequentemente, se carregar um certificado a partir da linha de comandos, todas as aplicações que consultam, movem ou eliminam esse certificado têm de utilizar o mesmo ID. Da mesma forma, se uma aplicação carregar o certificado, todos az sphere os comandos que manipulam o certificado têm de utilizar o mesmo ID. Se instalar um novo certificado com o mesmo ID que um certificado existente de qualquer tipo, o novo certificado substituirá o existente.

Atenção

Uma vez que os IDs de certificado são ao nível do sistema para certificados de AC de cliente e de raiz, um comando az sphere ou uma chamada de função que adiciona um novo certificado pode substituir um certificado que foi adicionado por uma chamada de comando ou função anterior, potencialmente causando falhas de ligação de rede. Recomendamos vivamente que desenvolva procedimentos de atualização de certificados claros e escolha cuidadosamente os IDs de certificado.

Adicionar um certificado ao arquivo de certificados

Para adicionar um certificado ao arquivo de certificados, uma aplicação chama uma das seguintes funções:

  • CertStore_InstallClientCertificate instala um certificado de cliente, que consiste num certificado público e numa chave privada
  • CertStore_InstallRootCACertificate instala um certificado de AC de Raiz, que consiste num certificado público

O certificado tem de estar presente no dispositivo antes de a aplicação poder instalá-lo. Os certificados têm de estar na sintaxe PKCS1 ou PKCS8 e no formato .pem para carregar para o dispositivo do Azure Sphere. Adquirir e implementar certificados para redes EAP-TLS descreve como adquirir certificados e carregá-los num dispositivo. A Microsoft não fornece certificados.

Instalar um certificado adiciona-o ao arquivo de certificados e disponibiliza-o para utilização na autenticação. No arquivo de certificados, os certificados são geridos por índice e podem ser obtidos por índice. O intervalo de valores de índice é executado de 0 a (CertStore_GetCertificateCount - 1).

Uma aplicação pode obter o ID do certificado num determinado índice ao chamar a função CertStore_GetCertificateIdentifierAt. Em seguida, pode utilizar o ID do certificado em chamadas para obter informações sobre o certificado, mover ou eliminar o certificado e utilizar um certificado para autenticação.

Obter informações do certificado

A API CertStore inclui várias funções que devolvem informações sobre um certificado armazenado:

Os tempos não anteriores e não posteriores são úteis na gestão da duração do certificado e das atualizações. Veja Ciclo de vida e renovação do certificado para obter detalhes.

Mudar o nome ou eliminar um certificado

Para mudar o nome ou eliminar um certificado, uma aplicação chama CertStore_MoveCertificate ou CertStore_DeleteCertificate.

CertStore_MoveCertificate muda o nome de um certificado ao alterar o respetivo ID de certificado. Uma vez que os IDs de certificado têm de ser exclusivos num dispositivo, mudar o nome de um certificado ao atribuir-lhe o mesmo ID que outro certificado elimina esse certificado. Por exemplo, se o arquivo de certificados MyCert contiver e YourCert, mover MyCert para YourCert resulta num único certificado com o ID YourCert, que contém os dados do anterior MyCert. Não é devolvido nenhum erro.

CertStore_DeleteCertificate elimina um único certificado. A eliminação de um certificado faz com que os restantes certificados sejam reindexados, a partir de 0. Por conseguinte, para eliminar todos os certificados no arquivo de certificados, tem de repetir o ciclo com base no número de certificados, mas eliminar o certificado no índice 0 em cada iteração. Se tentar eliminar um certificado num índice que já não está a ser utilizado, CertStore_GetCertificateIdentifierAt devolve ERANGE.

O seguinte método funciona corretamente:

for (int i = 0; i < CertStore_GetCertificateCount(); i++) {
    struct CertStore_Identifier id;
    result = CertStore_GetCertificateIdentifierAt(0, &id);
    CertStore_DeleteCertificate(id.identifier);
}

Utilizar um certificado para autenticação de rede

A API WifiConfig fornece funções que definem e devolvem os certificados que estão ativados para uma configuração Wi-Fi específica. Veja Configurar a rede EAP-TLS numa aplicação para obter detalhes sobre como uma aplicação de alto nível pode configurar uma rede EAP-TLS que utiliza certificados para autenticação.

Exemplo de certificado

A aplicação de exemplo Certificados mostra como uma aplicação pode utilizar as funções CertStore.