> For the complete documentation index, see [llms.txt](https://docs.scepman.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.scepman.com/pt/gestao-de-certificados/api-certificates/api-enrollment/linux-server.md).

# Servidor Linux

{% hint style="info" %}
Este recurso requer a versão **2.3.689** ou superior.
{% endhint %}

{% hint style="warning" %}
apenas na Edição Enterprise do SCEPman
{% endhint %}

Embora os outros casos de uso do SCEPman forneçam a capacidade de autenticar um utilizador de forma interativa para depois permitir apenas que ele inscreva certificados de utilizador para a sua conta ou os seus dispositivos, talvez você queira ser capaz de inscrever certificados de forma não interativa para sujeitos arbitrários.

Para conseguir isso, podemos autenticar um Service Principal e permitir que ele utilize a API REST de Enrollment do SCEPman.

## Pré-requisitos

Consulte o artigo de Enrollment da API sobre como criar um Service Principal que pode ser usado para autenticação:

{% content-ref url="/pages/d93fe80282e16b063db56892eb639ba9ec09c676" %}
[Registo via API](/pt/gestao-de-certificados/api-certificates/api-enrollment.md)
{% endcontent-ref %}

## Módulo PowerShell SCEPmanClient

### Pedidos iniciais

Pode usar o módulo PowerShell SCEPmanClient para solicitar certificados no seu servidor Linux:

```powershell
$Parameters = @{
    'Url'              = 'scepman.contoso.com'
    'ClientId'         = '569fbf51-aa63-4b5c-8b26-ebbcfcde2715'
    'TenantId'         = '8aa3123d-e76c-42e2-ba3c-190cabbec531'
    'ClientSecret'     = 'csa8Q~aVaWCLZTzswIBGvhxUiEvhptuqEyJugb70'
    'Subject'          = 'CN=LinuxServer'
    'IP'               = '10.22.11.8'
    'ExtendedKeyUsage' = 'ServerAuth'
    'SaveToFolder'     = '/etc/ssl/scepman'
    'IncludeRootCA'    = $true
}

New-SCEPmanCertificate @Parameters
```

### Renovação de certificados

Também pode usar o módulo PowerShell para renovar certificados já existentes. Isto também dispensa a आवश्यकता de usar um Service Principal para autenticação:

```powershell
$Parameters = @{
    'CertificateFromFile' = '/home/user/.certs/server.pem'
    'KeyFromFile'         = '/home/user/.certs/server.key'
    'SaveToFolder'        = '/home/user/.certs'
}

New-SCEPmanCertificate @Parameters
```

## Script de inscrição e renovação

Se o módulo PowerShell não for uma opção para si, o [enrollrenewcertificate.sh](https://github.com/scepman/csr-request/blob/main/enroll-certificate/enrollrenewcertificate.sh) script pode ser usado para obter inicialmente um certificado, bem como para o verificar e tentar uma renovação caso esteja prestes a expirar.

### Pré-requisitos do cliente

Os seguintes pré-requisitos devem estar presentes no cliente/host de execução para poder utilizar a API REST de inscrição.

#### [**Azure CLI**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) **( versão 2.61 e superior)**

O Azure CLI é usado para autenticar o utilizador em processo de inscrição, verificar a sua elegibilidade e obter o token de acesso.

#### cURL

Usado para enviar o CSR criado para o endpoint da API de inscrição do SCEPman e receber o certificado.

#### OpenSSL

O OpenSSL é usado para gerar uma chave privada e criar um CSR para inscrever ou renovar um certificado.

Exemplo:

{% code overflow="wrap" %}

```bash
./enrollrenewcertificate.sh -s https://scepman.contoso.net/ api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436 ~/certs/ "myCertificate" "myKeyName" 30 edbc406b-7384-414e-af8b-1a3b187b3f7e [Client_Secret] 736e80bb-3102-479b-83ba-e45c80ef723b "/CN=SubjectName,O=Organization" "DNS:webserver.contoso.com"
```

{% endcode %}

#### 1. Comando

Define o comportamento do script

Para este caso de uso, podemos usar as seguintes opções:

**-s** para certificado de servidor com deteção automática de se é uma inscrição inicial ou renovação

**-y** para inscrição inicial de um certificado de servidor

**-c** para submeter um pedido de assinatura de certificado existente

Para casos de uso de Autenticação de Cliente, consulte:

{% content-ref url="/pages/a1a42388bc8f13df52eb83a15e26c2e1cf016694" %}
[Cliente Linux não gerido](/pt/gestao-de-certificados/api-certificates/self-service-enrollment/unmanaged-linux-client.md)
{% endcontent-ref %}

#### 2. URL do serviço de aplicações

O URL do serviço de aplicações da SCEPman.

*Exemplo: "<https://scepman.contoso.net/>"*

#### 3. Escopo da API

Este é o ***URI do ID da Aplicação*** de ***SCEPman-api*** registo da aplicação no seu ambiente.

*Exemplo: "api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436"*

<figure><img src="https://3802289327-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2FtjlK9CzLeLcLmbu0nK3b%2Fimage.png?alt=media&amp;token=a7af923f-c790-416e-bb9d-9e640d391c44" alt=""><figcaption></figcaption></figure>

#### 4. Nome do ficheiro do certificado

O nome do ficheiro (sem extensão) do certificado que será criado ou lido para renovação.

*Exemplo: "myCertificate"*

#### 5. Diretório do certificado

O diretório no qual o certificado será criado ou no qual se tentará renová-lo.

*Exemplo: \~/certs/*

#### 8. Limiar de renovação

O número de dias em que o certificado terá de expirar para que o script inicie o processo de renovação.

*Exemplo: 30*

### *Parâmetros adicionais para certificados de servidor:*

#### 9. ID de cliente do Service Principal

O ID da aplicação (cliente) do registo da aplicação que queremos autenticar.

#### 10. Segredo de cliente do Service Principal

O segredo de cliente criado do registo da aplicação que queremos autenticar.

#### 11. ID do Tenant do Service Principal

O id do Tenant do nosso registo da aplicação.

#### 12. Assunto do certificado

O assunto com o qual pretende inscrever o certificado.

*Formato: /CN=SubjectName,O=Organization*

#### 13. Extensão do certificado

Isto será adicionado como nome alternativo do assunto

*Exemplo: DNS:webserver.contoso.com*

### *Exemplo de utilização para assinatura de CSR (-c comando)*

{% code overflow="wrap" %}

```bash
# Gerar uma chave privada
openssl genrsa -out myKey.rsa 4096

# Criar um CSR para um certificado de utilizador para autenticação de cliente
openssl req -new -key myKey.rsa -sha256 -out myCSR -subj "/CN=John Smith" -addext "subjectAltName=otherName:1.3.6.1.4.1.311.20.2.3;UTF8:john.smith@contoso.net" -addext "extendedKeyUsage=1.3.6.1.5.5.7.3.2"

./enrollrenewcertificate.sh -c https://scepman.contoso.net/ api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436 ~/certs "myCertificate" myKey.rsa 30 edbc406b-7384-414e-af8b-1a3b187b3f7e [Client_Secret] 736e80bb-3102-479b-83ba-e45c80ef723b myCSR

```

{% endcode %}

#### Considerações

* Este script não encripta as chaves geradas (isto requer introdução de frase-passe, pelo que a encriptação foi omitida para permitir a renovação automática.)
* Se estiver a renovar certificados protegidos por frase-passe do Certificate Master, terá de introduzir essa frase-passe para os renovar.

## Configurar renovação automática

Quando o script bash acima é executado e deteta que um certificado já foi inscrito, irá renovar o certificado (se estiver perto do vencimento) usando mTLS. Se o script for executado regularmente, isto garantirá que o certificado é renovado quando se aproxima do vencimento. Pode configurar uma cronjob para conseguir isto. O comando abaixo é um exemplo de como isso pode ser feito. Irá configurar uma cronjob para executar o comando diariamente (se o sistema estiver ligado) e uma cronjob para executar o comando no reinício.

{% code overflow="wrap" %}

```
(crontab -l ; echo @daily /path/to/enrollrenewcertificate.sh -s https://scepman.contoso.net/ api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436 /path/to/certs "myCertificate" "myKeyName" 30 edbc406b-7384-414e-af8b-1a3b187b3f7e [Client_Secret] 736e80bb-3102-479b-83ba-e45c80ef723b "/CN=SubjectName,O=Organization" "DNS:webserver.contoso.com" ; echo @reboot /path/to/enrollrenewcertificate.sh -s https://scepman.contoso.net/ api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436 /path/to/certs "myCertificate" "myKeyName" 30 edbc406b-7384-414e-af8b-1a3b187b3f7e [Client_Secret] 736e80bb-3102-479b-83ba-e45c80ef723b "/CN=SubjectName,O=Organization" "DNS:webserver.contoso.com") | crontab -
```

{% endcode %}

Uma vez que os comandos executados pelo Cron não serão necessariamente executados a partir do diretório onde o script/certificados se encontram, é importante fornecer os caminhos absolutos para o script/certificados.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.scepman.com/pt/gestao-de-certificados/api-certificates/api-enrollment/linux-server.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
