# 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="" %}
[](https://docs.scepman.com/pt/gerenciamento-de-certificados/api-certificates/api-enrollment)
{% 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="../self-service-enrollment/unmanaged-linux-client" %}
[unmanaged-linux-client](https://docs.scepman.com/pt/gerenciamento-de-certificados/api-certificates/self-service-enrollment/unmanaged-linux-client)
{% 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="https://3802289327-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2F9B88qmSsU3P2pcacwkHK%2Fimage.png?alt=media&#x26;token=26ea1304-d3d6-4fbf-a65b-27191a7be232" 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;
