# 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 usuário para então permitir apenas que ele registre certificados de usuário para sua conta ou seus dispositivos, você pode querer ser capaz de registrar certificados não interativamente para sujeitos arbitrários.

Para realizar isso, podemos autenticar um principal de serviço e permitir que ele aproveite a API REST de Registro (Enrollment) do SCEPman.

## Pré-requisitos

Consulte o artigo da API Enrollment sobre como criar um principal de serviço 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

Você 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 evita a necessidade de usar um principal de serviço 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 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 auto-detecção se é um registro inicial ou renovação

**-y** para registro inicial de um certificado de servidor

**-c** para enviar uma requisição de assinatura de certificado (CSR) apresentada

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 de ID da Aplicação*** do ***SCEPman-api*** registro do aplicativo em 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 Arquivo 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 tentado ser renovado.

*Exemplo: \~/certs/*

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

A quantidade de dias para o certificado expirar para que o script comece o processo de renovação.

*Exemplo: 30*

### *Parâmetros adicionais para Certificados de Servidor:*

#### 9. Id do Cliente do Principal de Serviço

O Id da Aplicação (Cliente) do registro de aplicativo que queremos autenticar.

#### 10. Segredo do Cliente do Principal de Serviço

O segredo de cliente criado do registro de aplicativo que queremos autenticar.

#### 11. Id do Locatário do Principal de Serviço

O id do locatário do nosso registro de aplicativo.

#### 12. Sujeito do Certificado

O sujeito com o qual você deseja registrar o certificado.

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

#### 13. Extensão do Certificado

Isto será adicionado como nome alternativo de sujeito (subject alternative name)

*Exemplo: DNS:webserver.contoso.com*

### *Exemplo de uso para assinatura de CSR (-c comando)*&#x20;

{% code overflow="wrap" %}

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

# Criar um CSR para um certificado de usuário 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 entrada de frase de segurança, então a criptografia foi omitida para permitir renovação automática).
* Se você estiver renovando certificados protegidos por frase de segurança do Certificate Master, precisará inserir essa frase de segurança 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 próximo da expiração. 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 nem sempre 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;
