# Servidor Linux

{% hint style="info" %}
Esta función 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 desee poder inscribir certificados de forma no interactiva para sujetos arbitrarios.

Para lograr esto, podemos autenticar un service principal y permitir que aproveche 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 la autenticación:

{% content-ref url="" %}
[](https://docs.scepman.com/es/administracion-de-certificados/api-certificates/api-enrollment)
{% endcontent-ref %}

## Módulo de PowerShell SCEPmanClient

### Solicitudes iniciales

Puede usar el módulo SCEPmanClient de PowerShell 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 puedes usar el módulo de PowerShell para renovar certificados ya existentes. Esto también evitará la necesidad de usar un principal de servicio 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 ti, el [enrollrenewcertificate.sh](https://github.com/scepman/csr-request/blob/main/enroll-certificate/enrollrenewcertificate.sh) script puede usarse para obtener inicialmente un certificado, así como para verificarlo e intentar una renovación en caso de que esté a punto de expirar.

### Requisitos previos del cliente

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 detección automática 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, consulte:

{% content-ref url="../self-service-enrollment/unmanaged-linux-client" %}
[unmanaged-linux-client](https://docs.scepman.com/es/administracion-de-certificados/api-certificates/self-service-enrollment/unmanaged-linux-client)
{% endcontent-ref %}

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

La URL del servicio de aplicación SCEPman.

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

#### 3. Alcance de la API

Este es el ***URI del ID de la aplicación*** de la ***SCEPman-api*** registro de aplicación en tu 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%2F9B88qmSsU3P2pcacwkHK%2Fimage.png?alt=media&#x26;token=26ea1304-d3d6-4fbf-a65b-27191a7be232" 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 la renovación.

*Ejemplo: "myCertificate"*

#### 5. Directorio del certificado

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

*Ejemplo: \~/certs/*

#### 8. Umbral de renovación

La cantidad de días que deben quedar para que venza el certificado para que el script comience el proceso de renovación.

*Ejemplo: 30*

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

#### 9. Id de cliente del service principal

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

#### 10. Secreto de cliente del service principal

El secreto de cliente creado del registro de la aplicación con la que queremos autenticarnos.

#### 11. Id de inquilino del service principal

El id de inquilino 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 (-c command)*&#x20;

{% 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 la introducción de una frase de contraseña, por lo que se ha omitido el cifrado para permitir la renovación automática).
* Si estás renovando certificados protegidos con frase de contraseña de Certificate Master, deberás introducir esta frase de contraseña para poder renovarlos.

## Configurar la renovación automática

Cuando se ejecuta el script bash anterior y detecta que un certificado ya ha sido inscrito, renovará el certificado (si está cerca de expirar) usando mTLS. Si el script se ejecuta regularmente, esto garantizará que el certificado se renueve cuando se acerque a su vencimiento. Puedes 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 diariamente (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 encuentran el script/los certificados, es importante proporcionar las rutas absolutas al script/a los certificados.&#x20;
