> 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/api-enrollment/linux-server.md).

# Servidor Linux

{% hint style="info" %}
Esta funcionalidad requiere la versión **2.3.689** o superior.
{% endhint %}

{% hint style="warning" %}
Solo en SCEPman Enterprise Edition
{% endhint %}

Mientras que los otros casos de uso de SCEPman proporcionan la capacidad de autenticar interactivamente a un usuario para luego permitirle solo inscribir certificados de usuario para su cuenta o sus dispositivos, es posible que quiera poder inscribir certificados de forma no interactiva para sujetos arbitrarios.

Para lograr esto podemos autenticar un Service Principal y permitirle aprovechar la API REST de inscripción de SCEPman.

## Requisitos previos

Consulte el artículo de inscripción de la API sobre cómo crear un Service Principal que pueda usarse para autenticación:

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

## Módulo de PowerShell SCEPmanClient

### Solicitudes iniciales

Puede usar el módulo de PowerShell SCEPmanClient para solicitar certificados en su 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
```

### Renovación de certificados

También puede usar el módulo de PowerShell para renovar certificados ya existentes. Esto también evitará la necesidad de usar un Service Principal para la autenticación:

```powershell
$Parameters = @{
    'CertificateFromFile' = '/home/user/.certs/server.pem'
    'KeyFromFile'         = '/home/user/.certs/server.key'
    'SaveToFolder'        = '/home/user/.certs'
}

New-SCEPmanCertificate @Parameters
```

## Script de inscripción y renovación

Si el módulo de PowerShell no es una opción para usted, el [enrollrenewcertificate.sh](https://github.com/scepman/csr-request/blob/main/enroll-certificate/enrollrenewcertificate.sh) script puede utilizarse para obtener inicialmente un certificado, así como para verificarlo e intentar una renovación en caso de que esté a punto de caducar.

### Requisitos previos del cliente

Se deben cumplir los siguientes requisitos previos en el cliente/anfitrión de ejecución para poder usar la API REST de inscripción.

#### [**Azure CLI**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) **(versión 2.61 y superior)**

La CLI de Azure se usa para autenticar al usuario que se inscribe, comprobar su elegibilidad y recuperar el token de acceso.

#### cURL

Se usa para enviar el CSR creado al punto de conexión de la API de inscripción de SCEPman y recibir el certificado.

#### OpenSSL

OpenSSL se usa para generar una clave privada y crear un CSR para inscribir o renovar un certificado.

Ejemplo:

{% 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 el comportamiento del script

Para este caso de uso podemos usar las siguientes opciones:

**-s** para certificado de servidor con autodetección de si se trata de una inscripción inicial o una renovación

**-y** para la inscripción inicial de un certificado de servidor

**-c** para enviar una solicitud de firma de certificado existente

Para los casos de uso de autenticación de cliente, vea:

{% content-ref url="/pages/830f7becb7c4c535929b3e8bdb7e9558a616abf4" %}
[Cliente Linux no administrado](/es/administracion-de-certificados/api-certificates/self-service-enrollment/unmanaged-linux-client.md)
{% endcontent-ref %}

#### 2. URL del servicio de la aplicación

La URL del servicio de la aplicación SCEPman.

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

#### 3. Ámbito de la API

Este es el ***URI del Id de aplicación*** de la ***SCEPman-api*** registro de aplicación en su entorno.

*Ejemplo: "api://a7a1d6c8-51b9-48ec-9ca0-a363dc2c8436"*

<figure><img src="https://4115997120-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2FtjlK9CzLeLcLmbu0nK3b%2Fimage.png?alt=media&amp;token=a7af923f-c790-416e-bb9d-9e640d391c44" alt=""><figcaption></figcaption></figure>

#### 4. Nombre de archivo del certificado

El nombre de archivo (sin extensión) del certificado que se creará o se leerá para su renovación.

*Ejemplo: "myCertificate"*

#### 5. Directorio del certificado

El directorio en el que se creará el certificado o en el que se intentará renovarlo.

*Ejemplo: \~/certs/*

#### 8. Umbral de renovación

La cantidad de días que faltan para que el certificado expire para que el script inicie el proceso de renovación.

*Ejemplo: 30*

### *Parámetros adicionales para certificados de servidor:*

#### 9. Id de cliente de Service Principal

El Id de la aplicación (cliente) del registro de aplicación que queremos autenticar.

#### 10. Secreto de cliente de Service Principal

El secreto de cliente creado del registro de aplicación que queremos autenticar.

#### 11. Id de Tenant de Service Principal

El id de Tenant de nuestro registro de aplicación.

#### 12. Asunto del certificado

El asunto con el que desea inscribir el certificado.

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

#### 13. Extensión del certificado

Esto se agregará como nombre alternativo del sujeto

*Ejemplo: DNS:webserver.contoso.com*

### *Ejemplo de uso para la firma de CSR (comando -c)*

{% code overflow="wrap" %}

```bash
# Generar una clave privada
openssl genrsa -out myKey.rsa 4096

# Crear una CSR para un certificado de usuario para autenticación 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 %}

#### Consideraciones

* Este script no cifra las claves generadas (esto requiere introducir una frase de contraseña, por lo que se ha omitido el cifrado para permitir la renovación automática).
* Si está renovando certificados protegidos con frase de contraseña de Certificate Master, deberá introducir esta frase de contraseña para poder renovarlos.

## Configurar renovación automática

Cuando se ejecuta el script bash anterior y detecta que ya se ha inscrito un certificado, renovará el certificado (si está cerca de caducar) usando mTLS. Si el script se ejecuta regularmente, esto garantizará que el certificado se renueve cuando esté cerca de caducar. Puede configurar un cronjob para lograr esto. El siguiente comando es un ejemplo de cómo podría hacerse. Configurará un cronjob para ejecutar el comando a diario (si el sistema está encendido) y un cronjob para ejecutar el comando al reiniciar.

{% 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 %}

Dado que los comandos ejecutados por Cron no necesariamente se ejecutarán desde el directorio en el que se encuentra el script/los certificados, es importante proporcionar las rutas absolutas al script/a los 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.scepman.com/es/administracion-de-certificados/api-certificates/api-enrollment/linux-server.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
