> 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/self-service-enrollment/unmanaged-linux-client.md).

# Cliente Linux não gerido

{% hint style="info" %}
Aplicável à versão 2.9 do SCEPman e superior
{% endhint %}

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

Este método pode ser usado para inscrever certificados para utilizadores e dispositivos que não são geridos ou são geridos por um MDM diferente do Intune.

## Pré-requisitos

### 1. Inscrição de autoatendimento

Para inscrever certificados, os utilizadores têm de ser autenticados para verificar a respetiva elegibilidade. Siga este guia para obter instruções passo a passo sobre como configurar isto

{% content-ref url="/pages/1e799ec75d1cb56025eee9c110760d8b59cd3666" %}
[Registo de autoatendimento](/pt/gestao-de-certificados/api-certificates/self-service-enrollment.md)
{% endcontent-ref %}

### 2. Definições do App Service

#### Configuração

*Necessário para renovação de certificado*

Configure o seu SCEPman App Service para aceitar certificados de cliente mTLS. No painel Configuration da seção Settings, verifique se o Client certificate mode em Incoming client certificates está definido como ***Utilizador interativo opcional***.

<figure><img src="https://3802289327-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2F9UeFFxwefnV8Cb7Zz14u%2Fimage.png?alt=media&amp;token=210ea9b7-ecd5-4b2b-9641-22447246e718" alt=""><figcaption></figcaption></figure>

Não defina o Client certificate mode como Require ou Allow, pois isso quebraria o funcionamento normal do SCEPman nos endpoints SCEP!

#### Variáveis de ambiente

Para usar este cenário, você deve definir as seguintes Variáveis de Ambiente no serviço de aplicativo SCEPman.

#### [AppConfig:DbCSRValidation:Enabled](https://docs.scepman.com/advanced-configuration/application-settings/dbcsr-validation#appconfig-dbcsrvalidation-enabled)

*Necessário para inscrição e renovação de certificado*

Defina esta variável como ***true*** para ativar a validação de solicitações de assinatura de certificado (CSRs).

#### [AppConfig:DbCSRValidation:AllowRenewals](https://docs.scepman.com/advanced-configuration/application-settings/dbcsr-validation#appconfig-dbcsrvalidation-allowrenewals)

*Necessário para renovação de certificado*

Defina esta variável como ***true*** para ativar renovações de certificado.

#### [AppConfig:DbCSRValidation:ReenrollmentAllowedCertificateTypes](https://docs.scepman.com/advanced-configuration/application-settings/dbcsr-validation#appconfig-dbcsrvalidation-reenrollmentallowedcertificatetypes)

*Necessário para renovação de certificado*

Defina esta variável como uma lista separada por vírgulas de tipos de certificado para os quais você deseja permitir a renovação. Consulte a documentação da variável vinculada para ver uma lista de tipos de certificado possíveis.

Exemplo: ***Static,IntuneUser,IntuneDevice***

Este cenário irá inscrever certificados do tipo ***IntuneUser.***

## Módulo PowerShell SCEPmanClient

### Pedidos iniciais

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

```powershell
New-SCEPmanCertificate -Url 'scepman.contoso.com' -SubjectFromUserContext -SaveToFolder '~/certs/'
```

O utilizador terá então de se autenticar interativamente numa sessão do navegador e será criado um certificado para a conta na qual tem sessão iniciada.

### 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' = '~/certs/john.doe@contoso.com.pem'
    'KeyFromFile'         = '~/certs/john.doe@contoso.com.key'
    'SaveToFolder'        = '~/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 -u https://scepman.contoso.net/ api://b7d17d51-8b6d-45eb-b42b-3dae638cd5bc/Cert.Enroll ~/certs/ "myCertificate" "myKey" 30
```

{% endcode %}

#### 1. Comando

Define o comportamento do script

Pode ser qualquer um dos seguintes:

**-u** para certificado de utilizador com deteção automática de se se trata de uma inscrição inicial ou de uma renovação

**-d** para certificado de dispositivo com deteção automática de se se trata de uma inscrição inicial ou de uma renovação

**-r** para renovação

**-w** para inscrição inicial de um utilizador

**-x** para inscrição inicial de um dispositivo

{% hint style="warning" %}
Se estiver a inscrever ou a renovar um certificado de dispositivo, o DeviceId será tentado ser lido de *\~/.config/intune/registration.toml* por predefinição e o utilizador autenticado terá de corresponder ao proprietário do objeto no [DeviceDirectory](https://docs.scepman.com/advanced-configuration/application-settings/intune-validation#appconfig-intunevalidation-devicedirectory)
{% endhint %}

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

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

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

#### 3. API\_SCOPE

Este é o âmbito da API que pode criar no ***SCEPman-api*** registo da aplicação no seu ambiente.

Ao utilizador será apresentado o diálogo de consentimento desejado e, posteriormente, poderá usar a funcionalidade de autoatendimento.

*Exemplo: "api://*&#x62;7d17d51-8b6d-45eb-b42b-3dae638cd5bc/Cert.Enrol&#x6C;*"*

<figure><img src="https://3802289327-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2FKWdXwi8JnKGy27tU384e%2Fimage.png?alt=media&amp;token=5173dc4b-8981-40e9-8875-e932078c6667" alt=""><figcaption></figcaption></figure>

#### 4. Diretório de certificados

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

*Exemplo: \~/certs/*

#### 5. Nome do ficheiro do certificado

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

*Exemplo: "myCertificate"*

#### 6. Nome do ficheiro da chave privada

O nome do ficheiro da chave privada que será criado ou lido para renovação.

*Exemplo: "myKey"*

#### 7. 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*

### 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.

<pre data-overflow="wrap"><code><strong>(crontab -l ; echo @daily /path/to/enrollrenewcertificate.sh -u https://scepman.contoso.net/ api://b7d17d51-8b6d-45eb-b42b-3dae638cd5bc/Cert.Enroll /home/user/certs/ "myCertificate" "myKeyName" 30 ; echo @reboot /path/to/enrollrenewcertificate.sh -u https://scepman.contoso.net/ api://b7d17d51-8b6d-45eb-b42b-3dae638cd5bc/Cert.Enroll /home/user/certs/ "myCertificate" "myKeyName" 30 ) | crontab -
</strong></code></pre>

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/self-service-enrollment/unmanaged-linux-client.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.
