> 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/es/administracion-de-certificados/api-certificates/scepmanclient.md).

# SCEPmanClient

SCEPmanClient es un módulo de PowerShell diseñado para interactuar con la API REST de SCEPman. Al ser independiente de la plataforma y compatible con Windows PowerShell v5, puedes usar este módulo para solicitar certificados para todos los casos de uso para los que se puede usar la API REST:

* Emisión automática de certificados de servidor
* Certificados de cliente para dispositivos no administrados
* Inscripción de certificados en dispositivos Linux

## Instalación

El módulo SCEPmanClient está disponible en la PowerShell Gallery y se puede instalar usando el siguiente comando:

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

{% hint style="info" %}
Sigue la guía de Microsoft sobre cómo instalar PowerShell en [Linux](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-linux?view=powershell-7.5) o [MacOS](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.5).
{% endhint %}

## Requisitos previos

Para que el módulo funcione como se espera, deberás añadir una pequeña modificación a tu implementación de SCEPman:

{% stepper %}
{% step %}

### Agregar URL de la página principal

Agregar la URL del App Service de SCEPman: Navega a la `Branding & Properties` sección del registro de la aplicación. Agrega la URL del App Service de SCEPman al campo URL de la página principal:

<figure><img src="/files/06577c2df68dac691aeb83ff07e2e3946eb03f40" alt=""><figcaption></figcaption></figure>

Esto es necesario para que el módulo pueda buscar automáticamente el client id del App Registration, que se necesita para la obtención del token de acceso.
{% endstep %}

{% step %}

### Permitir que Azure PowerShell interactúe con el App Registration

En el App Registration, navega a *Exponer una API* y crea un ámbito personalizado que pueda usarse para autorizar el client Id `1950a258-227b-4e31-a9cf-717495945fc2` (Microsoft Azure PowerShell)

<figure><img src="/files/5236ac050c9e3ab9d236dc9d209e6f824156a258" alt=""><figcaption><p>Información de ejemplo para un ámbito de API personalizado</p></figcaption></figure>

Después de crear un ámbito de API, la aplicación Azure PowerShell puede autorizarse:

<figure><img src="/files/c540228552a8e931c02c67028469ae588bb9271c" alt=""><figcaption><p>Aplicación Microsoft Azure PowerShell autorizada</p></figcaption></figure>
{% endstep %}

{% step %}

### Habilitar el endpoint EST

{% endstep %}
{% endstepper %}

## Permisos

SCEPman tiene distintos roles que permitirán inscribir distintos tipos de certificados. Puedes asignarlos en la *SCEPman-api* Enterprise Application (nombre predeterminado):

#### CSR DB Requesters

Este rol solo se puede asignar a service principals (por ejemplo, App Registrations) de forma predeterminada y permite solicitar certificados con subjects y usos arbitrarios.

{% content-ref url="/pages/b31d8f3786b22311eafcf73ce7738f65815607e8" %}
[Inscripción mediante API](/es/administracion-de-certificados/api-certificates/api-enrollment.md)
{% endcontent-ref %}

#### CSR Self Service

Este rol se puede asignar a usuarios y permitirá inscribir certificados con las siguientes restricciones:

* Solo EKU de ClientAuth
* Los certificados de usuario deben coincidir con el UPN del usuario en el subject o en el nombre alternativo del subject UPN
* Los certificados de dispositivo deben tener un subject o SAN que SCEPman pueda asociar a un objeto de dispositivo propiedad del usuario autenticado

{% content-ref url="/pages/31649805582853e94d36fcdf740fb0511d66a7d8" %}
[Inscripción de autoservicio](/es/administracion-de-certificados/api-certificates/self-service-enrollment.md)
{% endcontent-ref %}

## Ejemplos de uso

### Usar autenticación de Azure

#### Autenticación interactiva

Al solicitar un nuevo certificado sin especificar el mecanismo de autenticación, el usuario se autenticará de forma interactiva de manera predeterminada. Usando el `-SubjectFromUserContext` parámetro, el subject y el SAN UPN del certificado se completarán automáticamente según el contexto del usuario que haya iniciado sesión:

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

#### Inicio de sesión del dispositivo

Si quieres solicitar un nuevo certificado en un sistema sin entorno de escritorio, puedes usar el `-DeviceCode` parámetro para realizar la autenticación real en otra sesión:

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

#### Autenticación con Service Principal

En escenarios totalmente automatizados, un App Registration puede usarse para la autenticación. En este caso no será posible inferir el subject a partir del contexto autenticado.

El uso de splatting de parámetros también hará que la ejecución sea más legible:

```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
```

### Autenticarse usando certificados

Una vez que se ha emitido un certificado usando un contexto autenticado, podemos usarlo para renovarlo sin proporcionar de nuevo ningún contexto.

#### CertificateBySubject

*Interactuar con los almacenes de claves solo es posible en Windows*

Al proporcionar el `CertificateBySubject` parámetro, el módulo intentará automáticamente encontrar un certificado adecuado para la renovación en los almacenes de claves *CurrentUser* y *LocalMachine* .

El valor introducido se comparará con expresiones regulares contra los subjects de todos los certificados disponibles.

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

#### Proporcionar un certificado específico

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

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

#### CertificateFromFile

En sistemas Linux, la renovación de un certificado puede realizarse pasando las rutas de un certificado existente y su clave privada.

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

Cuando uses una clave privada cifrada, se te pedirá la contraseña. También puedes pasar directamente la contraseña de la clave usando el `PlainTextPassword` parámetro.

#### Usar SCEPman con un Azure Web Application Firewall

Con los perfiles SSL habilitados, el WAF terminará las conexiones TLS. Esto a su vez romperá las renovaciones de certificados usando EST, ya que el procedimiento depende de mTLS para la autenticación. En este caso, el `UseSCEPRenewal` parámetro puede usarse para realizar en su lugar una renovación de certificado que cumpla con el protocolo SCEP.

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

Ten en cuenta que esto requiere configuración adicional de SCEPman con respecto al endpoint SCEP estático:

* AppConfig:StaticValidation:Enabled : true
* AppConfig:StaticValidation:AllowRenewals : true
* AppConfig:StaticValidation:ReenrollmentAllowedCertificateTypes: Static (dependiendo de los tipos destinados a la renovación)


---

# 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/es/administracion-de-certificados/api-certificates/scepmanclient.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.
