# SCEPmanClient

SCEPmanClient é um módulo PowerShell destinado a interagir com a API REST do SCEPman. Sendo independente de plataforma e compatível com o Windows PowerShell v5, você pode usar este módulo para solicitar certificados para todos os casos de uso para os quais a API REST pode ser usada:

* Emissão automática de certificados de servidor
* Certificados de cliente para dispositivos não geridos
* Inscrição de certificados em dispositivos Linux

## Instalação

O módulo SCEPmanClient está disponível na Galeria do PowerShell e pode ser instalado usando o seguinte comando:

```powershell
Install-Module -Name SCEPmanClient
```

{% hint style="info" %}
Siga o guia da Microsoft sobre como instalar o PowerShell em [Linux](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-linux?view=powershell-7.5) ou [MacOS](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.5).
{% endhint %}

## Pré-requisitos

Para que o módulo funcione como esperado, você precisará fazer uma pequena modificação na sua implementação do SCEPman:

{% stepper %}
{% step %}

### Adicionar URL da página inicial

Adicione a URL do App Service do SCEPman: Navegue até a `Branding & Properties` secção do registo da aplicação. Adicione a URL do App Service do SCEPman ao campo URL da página inicial:

<figure><img src="/files/05f9287d38b951bb05335adfee6be3b8979c0d08" alt=""><figcaption></figcaption></figure>

Isto é necessário para que o módulo possa procurar automaticamente o ID de cliente do registo da aplicação, que é necessário para a obtenção do token de acesso.
{% endstep %}

{% step %}

### Permitir que o Azure PowerShell interaja com o Registo da Aplicação

No Registo da Aplicação, navegue até *Expor uma API* e crie um escopo personalizado que possa ser usado para autorizar o ID do cliente `1950a258-227b-4e31-a9cf-717495945fc2` (Microsoft Azure PowerShell)

<figure><img src="/files/5a691938d30646e559e183abcdcc170ad994cbfb" alt=""><figcaption><p>Informações de exemplo para um escopo de API personalizado</p></figcaption></figure>

Após criar um escopo de API, a aplicação Azure PowerShell pode ser autorizada:

<figure><img src="/files/b80862f423d5fb4d01b0dd9d6c435d20d4248c14" alt=""><figcaption><p>Aplicação Microsoft Azure PowerShell autorizada</p></figcaption></figure>
{% endstep %}

{% step %}

### Ativar o endpoint EST

{% endstep %}
{% endstepper %}

## Permissões

O SCEPman tem diferentes funções que permitirão que diferentes tipos de certificados sejam inscritos. Pode atribuí-las na *SCEPman-api* Aplicação Empresarial (nome predefinido):

#### CSR DB Requesters

Esta função, por predefinição, só pode ser atribuída a principais de serviço (por exemplo, Registos de Aplicações) e permite solicitar certificados com assuntos e utilizações arbitrários.

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

#### CSR Self Service

Esta função pode ser atribuída a utilizadores e permitirá que os certificados sejam inscritos com as seguintes restrições:

* Apenas EKU ClientAuth
* Os certificados de utilizador precisam corresponder ao UPN do utilizador no assunto ou no nome alternativo do assunto UPN
* Os certificados de dispositivo precisam de ter um assunto ou SAN que o SCEPman possa mapear para um objeto de dispositivo pertencente ao utilizador autenticado

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

## Exemplos de utilização

### Usar autenticação do Azure

#### Autenticação interativa

Ao solicitar um novo certificado sem especificar o mecanismo de autenticação, o utilizador será autenticado interativamente por predefinição. Ao usar o `-SubjectFromUserContext` parâmetro, o assunto do certificado e o SAN UPN serão preenchidos automaticamente com base no contexto do utilizador com sessão iniciada:

```powershell
New-SCEPmanCertificate -Url 'scepman.contoso.com' -SubjectFromUserContext -SaveToStore CurrentUser
```

#### Início de sessão do dispositivo

Se quiser solicitar um novo certificado num sistema sem qualquer ambiente de trabalho, pode usar o `-DeviceCode` parâmetro para realizar a autenticação propriamente dita noutra sessão:

```powershell
New-SCEPmanCertificate -Url 'scepman.contoso.com' -DeviceCode -SubjectFromUserContext -SaveToFolder /home/user/certificates
```

#### Autenticação por principal de serviço

Em cenários totalmente automatizados, um Registo de Aplicação pode ser usado para autenticação. Inferir o assunto a partir do contexto autenticado não será possível neste caso.

O uso de splatting de parâmetros também tornará a execução mais legível:

```powershell
$Parameters = @{
    'Url'              = 'scepman.contoso.com'
    'ClientId'         = '569fbf51-aa63-4b5c-8b26-ebbcfcde2715'
    'TenantId'         = '8aa3123d-e76c-42e2-ba3c-190cabbec531'
    'ClientSecret'     = 'csa8Q~aVaWCLZTzswIBGvhxUiEvhptuqEyJugb70'
    'Subject'          = 'CN=WebServer'
    'DNSName'          = 'Webserver.domain.local'
    'ExtendedKeyUsage' = 'ServerAuth'
    'SaveToStore'      = 'LocalMachine'
}

New-SCEPmanCertificate @Parameters
```

### Autenticar usando certificados

Depois de um certificado ter sido emitido usando um contexto autenticado, podemos usá-lo para renová-lo sem fornecer novamente qualquer contexto.

#### CertificateBySubject

*Interagir com keystores só é possível no Windows*

Ao fornecer o `CertificateBySubject` parâmetro, o módulo tentará automaticamente encontrar um certificado adequado para renovação nos keystores *CurrentUser* e *LocalMachine* .

O valor introduzido será correspondido por regex com os assuntos de todos os certificados disponíveis.

```powershell
New-SCEPmanCertificate -CertificateBySubject 'WebServer' -SaveToStore 'LocalMachine'
```

#### Fornecer um certificado específico

```powershell
$Certificate = Get-ChildItem Cert:\LocalMachine\My | Where-Object Thumbprint -eq '9B08EA68B16773CEF3C49D5D95BE50B784638984'

New-SCEPmanCertificate -Certificate $Certificate -SaveToStore LocalMachine
```

#### CertificateFromFile

Em sistemas Linux, a renovação de um certificado pode ser realizada passando os caminhos de um certificado existente e da respetiva chave privada.

```powershell
New-SCEPmanCertificate -CertificateFromFile '~/certs/myCert.pem' -KeyFromFile '~/certs/myKey.key' -SaveToFolder '~/certs'
```

Ao usar uma chave privada encriptada, ser-lhe-á pedida a palavra-passe. Também pode passar diretamente a palavra-passe da chave usando o `PlainTextPassword` parâmetro.

#### Usar o SCEPman com uma Firewall de Aplicação Web do Azure

Com os Perfis SSL ativados, o WAF terminará as ligações TLS. Isto, por sua vez, quebrará as renovações de certificados usando EST, pois o procedimento depende de mTLS para autenticação. Neste caso, o `UseSCEPRenewal` parâmetro pode ser usado para, em vez disso, realizar uma renovação de certificado em conformidade com o protocolo SCEP.

```powershell
New-SCEPmanCertificate -CertificateBySubject 'WebServer' -SaveToStore 'LocalMachine' -UseSCEPRenewal
```

Tenha em atenção que isto requer configuração adicional do SCEPman relativamente ao endpoint SCEP estático:

* AppConfig:StaticValidation:Enabled : true
* AppConfig:StaticValidation:AllowRenewals : true
* AppConfig:StaticValidation:ReenrollmentAllowedCertificateTypes: Static (Dependendo dos tipos destinados à renovação)


---

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