# Gere um certificado Let's Encrypt via API

import Tabs from '~/components/tabs/Tabs'
import Code from '~/components/Code/Code.astro'

As aplicações que utilizam o protocolo HTTPS requerem um [Digital Certificate](/pt-br/documentacao/produtos/secure/firewall/certificate-manager/). Ao direcionar seu tráfego para a Azion, você tem a opção de gerar um certificado *Let's Encrypt*™, que é uma maneira gratuita e segura de criptografar dados para sua application. A Azion automatiza a emissão, renovação e desativação deste certificado TLS através de uma solução interna de gerenciamento de certificados.

## Certificados Let's Encrypt via API

A API V4 da Azion oferece emissão e renovação de [certificados Let's Encrypt](/pt-br/documentacao/produtos/secure/firewall/certificate-manager/) utilizando dois métodos de validação:

- **DNS-01**: Validação através de um registro TXT no DNS do domínio. Este método é recomendado quando você tem controle sobre os registros DNS do domínio, sendo ideal para domínios wildcard (`*`) ou quando você não tem acesso direto ao servidor web.
- **HTTP-01**: Validação através de um arquivo disponibilizado no servidor web. Este método é recomendado quando você não tem controle sobre os registros DNS, sendo mais simples para domínios que já apontam para a infraestrutura da Azion.

Os certificados são renovados automaticamente antes de expirar, desde que as configurações de validação estejam válidas e atualizadas, eliminando janelas de manutenção e mantendo as cotas, faturamento e permissões existentes.

Para mais informações sobre essas atualizações visite a documentação de [Certificate Manager](/pt-br/documentacao/produtos/secure/firewall/certificate-manager/).

---

## Como emitir um certificado Let's Encrypt via API

<Tabs client:visible>
<Fragment slot="tab.dns01">Challenge DNS-01</Fragment>
<Fragment slot="tab.http01">Challenge HTTP-01</Fragment>

<Fragment slot="panel.dns01">

### Emitir certificado via DNS-01

O desafio DNS-01 requer a adição de um registro TXT no DNS do domínio para comprovar a propriedade. Este método é ideal para domínios wildcard ou quando você prefere gerenciar a validação via DNS.

1. Defina o hostname que será usado no certificado digital (por exemplo, `meusite.azion.com`) como `common_name`.

2. Configure o registro CNAME `_acme-challenge` no seu provedor de DNS conforme descrito no guia [Como gerar um certificado Let's Encrypt para o seu domínio](/pt-br/documentacao/produtos/guias/como-gerar-um-certificado-lets-encrypt/#opcao-2-preparar-a-entrada-de-dns-com-um-provedor-de-dns-externo).

3. Crie ou use um Token existente de API (ver [Primeiros passos com a API da Azion](https://www.azion.com/pt-br/documentacao/produtos/devtools/primeiros-passos-api/)).

4. Faça uma chamada para requisitar um novo certificado com o desafio `"dns"` no endpoint `https://api.azion.com/v4/digital_certificates/certificates/request`.

Por exemplo:

<Code lang="bash" code={`curl --request POST \\
  --url https://api.azion.com/v4/digital_certificates/certificates/request \\
  --header 'Accept: application/json' \\
  --header 'Authorization: Bearer {seutoken}' \\
  --header 'Content-Type: application/json' \\
  --data '{
  "name": "Meu certificado",
  "challenge": "dns",
  "authority": "lets_encrypt",
  "common_name": "meusite.azion.com",
  "alternative_names": []
}'`}/>

5. A resposta será semelhante à abaixo:

```json
{
  "state": "executed",
  "data": {
    "id": 127013,
    "name": "Meu certificado",
    "certificate": null,
    "issuer": null,
    "subject_name": [
      "meusite.azion.com"
    ],
    "validity": null,
    "status": "Pending",
    "type": "edge_certificate",
    "managed": true,
    "status_detail": "",
    "csr": null,
    "challenge": "dns",
    "authority": "lets_encrypt",
    "key_algorithm": "",
    "active": true,
    "product_version": "2.0",
    "last_editor": "{seu_usuario@azion.com}",
    "last_modified": "2025-06-25T21:32:21.016402Z"
  }
}
```

6. Se o status resultante for **Pending**, o agendamento foi concluído com sucesso.

7. Monitore o status da emissão consultando os detalhes do certificado pelo endpoint `https://api.azion.com/v4/digital_certificates/certificates/{id}`, substituindo o `{id}` pelo identificador respondido anteriormente.

   a. Em caso de falha, será exibida uma mensagem de erro na propriedade **status_detail**, como por exemplo: `"status_detail": "An error has occurred while issuing the requested certificate. Please verify the following domains CNAME: meusite.azion.com"`

8. Se o processo ocorreu com sucesso, o certificado será emitido e o status será **Active**.

9. Agora basta associar seu certificado ao workload desejado e ajustar as propriedades TLS/HTTPS de sua preferência.

</Fragment>

<Fragment slot="panel.http01">

### Emitir certificado via HTTP-01

O desafio HTTP-01 oferece um processo simplificado sem a necessidade de registros TXT no DNS. Isso oferece uma solução de integração fácil e conveniente, especialmente benéfica para clientes que gerenciam diversos domínios e nomes de host.

1. Defina o hostname que será usado no certificado digital (por exemplo, `meusite.azion.com`) como `common_name`.

2. Garanta que o DNS para tal hostname esteja apontado para Azion (ver [Como apontar seu domínio para a Azion](/pt-br/documentacao/produtos/guias/apontar-dominio-para-a-azion/)). Isso deve ser feito no seu serviço provedor de DNS.

   a. Caso precise emitir um certificado único com múltiplos hostnames (alternative names), todos os hostnames devem ser direcionados para Azion; caso contrário a emissão falhará.

3. Uma vez que o DNS responda corretamente, crie ou use um Token existente de API (ver [Primeiros passos com a API da Azion](https://www.azion.com/pt-br/documentacao/produtos/devtools/primeiros-passos-api/)).

4. Faça uma chamada para requisitar um novo certificado com o desafio `"http"` no endpoint `https://api.azion.com/v4/digital_certificates/certificates/request`.

Por exemplo:

<Code lang="bash" code={`curl --request POST \\
  --url https://api.azion.com/v4/digital_certificates/certificates/request \\
  --header 'Accept: application/json' \\
  --header 'Authorization: Bearer {seutoken}' \\
  --header 'Content-Type: application/json' \\
  --data '{
  "name": "Meu certificado",
  "challenge": "http",
  "authority": "lets_encrypt",
  "common_name": "meusite.azion.com",
  "alternative_names": []
}'`}/>

5. A resposta será semelhante à abaixo:

```json
{
  "state": "executed",
  "data": {
    "id": 127013,
    "name": "Meu certificado",
    "certificate": null,
    "issuer": null,
    "subject_name": [
      "meusite.azion.com"
    ],
    "validity": null,
    "status": "Pending",
    "type": "edge_certificate",
    "managed": true,
    "status_detail": "",
    "csr": null,
    "challenge": "http",
    "authority": "lets_encrypt",
    "key_algorithm": "",
    "active": true,
    "product_version": "2.0",
    "last_editor": "{seu_usuario@azion.com}",
    "last_modified": "2025-06-25T21:32:21.016402Z"
  }
}
```

6. Se o status resultante for **Pending**, o agendamento foi concluído com sucesso.

7. A plataforma Azion irá agendar a emissão do certificado automaticamente mesmo que você não tenha um Workload com o hostname relativo publicado e ativo na Azion.

   a. A própria Azion sobe um serviço que responde o desafio Let's Encrypt HTTP-01 e o finaliza assim que a emissão é concluída.

8. Monitore o status da emissão pela consulta dos detalhes do certificado pelo endpoint `https://api.azion.com/v4/digital_certificates/certificates/{id}` substituindo o `{id}` pelo identificador respondido anteriormente, como no exemplo `"id": 127013`.

   a. Em caso de falha, será exibida uma mensagem de erro na propriedade **status_detail**, como por exemplo: `"status_detail": "An error has occurred while issuing the requested certificate. Please verify the following domains CNAME: meusite.azion.com"`

9. Se o processo ocorreu com sucesso, o certificado será emitido e o status será **Active**.

10. Agora basta associar seu certificado ao workload desejado e ajustar as propriedades TLS/HTTPS de sua preferência.

</Fragment>
</Tabs>