# Servidor Linux

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

{% hint style="warning" %}
Apenas SCEPman Enterprise Edition
{% endhint %}

Enquanto os outros casos de uso do SCEPman fornecem a capacidade de autenticar interativamente um utilizador para depois permitir apenas que ele inscreva certificados de utilizador para a sua conta ou os seus dispositivos, pode querer 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 aproveite a Enrollment REST API do SCEPman.

## Pré-requisitos

Consulte o artigo de API Enrollment sobre como criar um service principal que pode ser usado para autenticação:

{% content-ref url="/pages/d93fe80282e16b063db56892eb639ba9ec09c676" %}
[Inscrição por API](/pt/gestao-de-certificados/api-certificates/api-enrollment.md)
{% endcontent-ref %}

## Módulo PowerShell SCEPmanClient

### Solicitações 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 Certificado

Você também pode usar o módulo PowerShell para renovar certificados já existentes. Isso também dispensa a necessidade 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 você, o [enrollrenewcertificate.sh](https://github.com/scepman/csr-request/blob/main/enroll-certificate/enrollrenewcertificate.sh) script pode ser usado para receber inicialmente um certificado, bem como para verificá-lo e tentar uma renovação caso ele esteja prestes a expirar.

### Pré-requisitos do Cliente

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, quer seja uma inscrição inicial ou uma 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, veja:

{% 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 App Service

A URL do serviço de aplicativo SCEPman.

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

#### 3. Escopo da API

Isto é o ***URI do ID da Aplicação*** da ***SCEPman-api*** registro de aplicativo no seu ambiente.

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

<figure><img src="/files/2acc4a02da0eb333c73442f76f154ba46784a430" alt=""><figcaption></figcaption></figure>

#### 4. Nome do Ficheiro do Certificado

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

*Exemplo: "myCertificate"*

#### 5. Diretório do Certificado

O diretório onde o certificado será criado ou para o qual será tentada a renovação.

*Exemplo: \~/certs/*

#### 8. Limite de Renovação

A quantidade de dias para os quais o certificado precisará estar prestes a 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 com a qual queremos autenticar.

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

O segredo de cliente criado do registo da aplicação com a qual queremos autenticar.

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

O ID do tenant do nosso registo de 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 command)*&#x20;

{% 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 criptografa as chaves geradas (isso requer a entrada de uma senha, portanto a criptografia foi omitida para permitir a renovação automática).
* Se você estiver renovando certificados protegidos por senha do Certificate Master, precisará informar essa senha para renová-los.

## Configurar renovação automática

Quando o script bash acima for executado e detectar que um certificado já foi inscrito, ele renovará o certificado (se estiver próximo da expiração) usando mTLS. Se o script for executado regularmente, isso garantirá que o certificado seja renovado quando estiver perto de expirar. Você pode configurar um cronjob para conseguir isso. O comando abaixo é um exemplo de como isso pode ser feito. Ele configurará um cronjob para executar o comando diariamente (se o sistema estiver ligado) e um cronjob para executar o comando na reinicialização.

{% 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 %}

Como os comandos executados pelo Cron não necessariamente serão executados a partir do diretório em que o script/certificados estão, é importante fornecer os caminhos absolutos para o script/certificados.&#x20;


---

# Agent Instructions: 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:

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

The question should be specific, self-contained, and written in natural language.
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.
