

Aviso de fin de soporte: el 7 de octubre de 2026, AWS suspenderemos el soporte para AWS IoT Greengrass Version 1. Después del 7 de octubre de 2026, ya no podrá acceder a los AWS IoT Greengrass V1 recursos. Para obtener más información, visita [Migrar desde AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html).

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Módulo 7: Simulación de la integración de seguridad del hardware
<a name="console-mod7"></a>

Esta función está disponible para AWS IoT Greengrass Core v1.7 y versiones posteriores.

En este módulo avanzado se muestra cómo configurar un módulo de seguridad de hardware (HSM) simulado para su uso con un núcleo de Greengrass. La configuración utiliza SoftHSM, que es una implementación de software puro que utiliza la interfaz de programación de aplicaciones (API) [PKCS\$111](#console-mod7-see-also). El objetivo de este módulo es permitirle configurar un entorno donde pueda obtener información y realizar las pruebas iniciales en una implementación de solo software de la API de PKCS\$111. Se proporciona solo para el aprendizaje y las pruebas iniciales, no para su uso en producción de ningún tipo.

Puede utilizar esta configuración para experimentar usando un servicio compatible con PKCS\$111 para almacenar con sus claves privadas. Para obtener más información sobre la implementación solo de software, consulte [SoftHSM](https://www.opendnssec.org/softhsm/). Para obtener más información sobre la integración de la seguridad del hardware en un AWS IoT Greengrass núcleo, incluidos los requisitos generales, consulte[Integración de la seguridad de hardware](hardware-security.md).

**importante**  
Este módulo está destinado solo a fines de experimentación. Recomendamos encarecidamente evitar el uso de SoftHSM en un entorno de producción, ya que puede proporcionar una falsa sensación de seguridad adicional. La configuración resultante no proporciona ninguna ventaja de seguridad real. Las claves almacenadas en SoftHSM no se almacenan de forma más segura que en cualquier otro medio de almacenamiento de secretos en el entorno de Greengrass.  
El objetivo de este módulo es permitir que aprenda acerca de la especificación de PKCS\$111 y realice las pruebas iniciales de su software si pretende utilizar un HSM real basado en hardware en el futuro.  
Debe probar su futura implementación de hardware por separado y por completo antes de cualquier uso en producción, ya que es posible que haya diferencias entre la implementación de PKCS\$111 proporcionada en SoftHSM y una implementación basada en hardware.

Si necesita ayuda para incorporar un [módulo de seguridad de hardware compatible](hardware-security.md#hardware-security-reqs), póngase en contacto con su representante de AWS Enterprise Support.

Antes de comenzar, ejecute el script de [configuración de dispositivos de Greengrass](quick-start.md) o asegúrese de haber completado el [módulo 1](module1.md) y el [módulo 2](module2.md) del tutorial de introducción. En este módulo, asumimos que su núcleo ya está aprovisionado y con el que se está comunicando. AWS Completar este módulo debería tomarle aproximadamente 30 minutos.

## Instalación del software SoftHSM
<a name="softhsm-install"></a>

En este paso, se instala SoftHSM y las herramientas pkcs11, que se utilizan para administrar su instancia SoftHSM.
+ En una terminal de su dispositivo AWS IoT Greengrass principal, ejecute el siguiente comando:

  ```
  sudo apt-get install softhsm2 libsofthsm2-dev pkcs11-dump
  ```

  Para obtener más información acerca de estos paquetes, consulte [Install softhsm2](https://www.howtoinstall.co/en/ubuntu/xenial/softhsm2), [Install libsofthsm2-dev](https://www.howtoinstall.co/en/ubuntu/xenial/libsofthsm2-dev) e [Install pkcs11-dump](https://www.howtoinstall.co/en/ubuntu/xenial/pkcs11-dump).
**nota**  
Si tiene problemas al utilizar este comando en el sistema, consulte [SofthSM versión 2 en adelante](https://github.com/opendnssec/SoftHSMv2). GitHub Este sitio proporciona más información de la instalación, incluido cómo compilar desde el origen.

## Configurar SoftHSM
<a name="softhsm-config"></a>

En este paso, [configurará SoftHSM](https://github.com/opendnssec/SoftHSMv2#configure-1).

1. Cambie al usuario raíz.

   ```
   sudo su
   ```

1. Utilice la página del manual para encontrar la ubicación `softhsm2.conf` en el sistema. Una ubicación común es `/etc/softhsm/softhsm2.conf`, pero la ubicación puede ser diferente en algunos sistemas.

   ```
   man softhsm2.conf
   ```

1. Cree el directorio para el archivo de configuración softhsm2 en la ubicación del sistema. En este ejemplo, supondremos que la ubicación es `/etc/softhsm/softhsm2.conf`.

   ```
   mkdir -p /etc/softhsm
   ```

1. Cree el directorio del token en el directorio `/greengrass`.
**nota**  
Si se omite este paso, softhsm2-util muestra `ERROR: Could not initialize the library`.

   ```
   mkdir -p /greengrass/softhsm2/tokens
   ```

1. Configure el directorio del token.

   ```
   echo "directories.tokendir = /greengrass/softhsm2/tokens" > /etc/softhsm/softhsm2.conf
   ```

1. Configure un backend basado en archivos.

   ```
   echo "objectstore.backend = file" >> /etc/softhsm/softhsm2.conf
   ```

**nota**  
Estos valores de configuración son solo con fines de experimentación. Para ver todas las opciones de configuración, lea la página del manual del archivo de configuración.  

```
man softhsm2.conf
```

## Importación de la clave privada en SoftHSM.
<a name="softhsm-import-key"></a>

En este paso, debe inicializar el token de SoftHSM, convertir el formato de clave privada y, a continuación, importar la clave privada.

1. Inicializar el token de SoftHSM.

   ```
   softhsm2-util --init-token --slot 0 --label greengrass --so-pin 12345 --pin 1234
   ```
**nota**  
Si se le pide, introduzca el pin de SO `12345` y el pin de usuario `1234`. AWS IoT Greengrass no utiliza el pin de SO (supervisor), por lo que puede utilizar cualquier valor.  
Si recibe el error `CKR_SLOT_ID_INVALID: Slot 0 does not exist`, pruebe el siguiente comando en su lugar:  

   ```
   softhsm2-util --init-token --free --label greengrass --so-pin 12345 --pin 1234
   ```

1. Convierta la clave privada en un formato que se pueda utilizar por la herramienta de importación de SoftHSM. Para este tutorial, puede convertir la clave privada que se obtuvo de la opción **Default Group creation (Creación predeterminada de grupo)** en el [Módulo 2](module2.md) del tutorial de introducción.

   ```
   openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in hash.private.key -out hash.private.pem
   ```

1. Importar la clave privada a SoftHSM. Ejecute solo uno de los siguientes comandos, en función de su versión de softhsm2-util.  
Sintaxis de **Raspbian softhsm2-util v2.2.0**  

   ```
   softhsm2-util --import hash.private.pem --token greengrass --label iotkey --id 0000 --pin 12340
   ```  
Sintaxis de **Ubuntu softhsm2-util v2.0.0**  

   ```
   softhsm2-util --import hash.private.pem --slot 0 --label iotkey --id 0000 --pin 1234
   ```

   Este comando identifica el slot como `0` y define la etiqueta de clave como `iotkey`. Usará estos valores en la sección siguiente.

Después de que se importe la clave privada, tiene la opción de quitarla del directorio `/greengrass/certs`. Asegúrese de mantener los certificados CA raíz y de dispositivo en el directorio.

## Configuración del núcleo de Greengrass para que utilice SoftHSM
<a name="softhsm-config-core"></a>

En este paso, debe modificar el archivo de configuración del núcleo de Greengrass para utilizar SoftHSM.

1. Busque la ruta de la biblioteca del proveedor de SoftHSM (`libsofthsm2.so`) en el sistema:

   1. Obtenga la lista de los paquetes instalados para la biblioteca.

      ```
      sudo dpkg -L libsofthsm2
      ```

      El archivo `libsofthsm2.so` se encuentra en el directorio `softhsm`.

   1. Copie la ruta completa al archivo (por ejemplo, `/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so`). Usará este valor más tarde.

1. Detenga el daemon de Greengrass.

   ```
   cd /greengrass/ggc/core/
   sudo ./greengrassd stop
   ```

1. Abra el archivo de configuración de Greengrass. Este es el archivo [`config.json`](gg-core.md#config-json) del directorio `/greengrass/config`.
**nota**  
Los ejemplos en este procedimiento se han escrito partiendo del supuesto de que el archivo `config.json` utiliza el formato generado desde la opción **Default Group Creation (Creación predeterminada de grupo)** en el [Módulo 2](module2.md) del tutorial de introducción.

1. En el objeto `crypto.principals`, inserte el siguiente objeto de certificado de servidor MQTT. Añada una coma cuando sea necesario para crear un archivo JSON válido.

   ```
     "MQTTServerCertificate": {
       "privateKeyPath": "path-to-private-key"
     }
   ```

1. En el objeto `crypto`, inserte el siguiente objeto `PKCS11`. Añada una coma cuando sea necesario para crear un archivo JSON válido.

   ```
     "PKCS11": {
       "P11Provider": "/path-to-pkcs11-provider-so",
       "slotLabel": "crypto-token-name",
       "slotUserPin": "crypto-token-user-pin"
     }
   ```

   El archivo debe ser similar al siguiente:

   ```
   {
     "coreThing" : {
       "caPath" : "root.ca.pem",
       "certPath" : "hash.cert.pem",
       "keyPath" : "hash.private.key",
       "thingArn" : "arn:partition:iot:region:account-id:thing/core-thing-name",
       "iotHost" : "host-prefix.iot.region.amazonaws.com",
       "ggHost" : "greengrass.iot.region.amazonaws.com",
       "keepAlive" : 600
     },
     "runtime" : {
       "cgroup" : {
         "useSystemd" : "yes"
       }
     },
     "managedRespawn" : false,
     "crypto": {
       "PKCS11": {
         "P11Provider": "/path-to-pkcs11-provider-so",
         "slotLabel": "crypto-token-name",
         "slotUserPin": "crypto-token-user-pin"
       },
       "principals" : {
         "MQTTServerCertificate": {
           "privateKeyPath": "path-to-private-key"
         },
         "IoTCertificate" : {
           "privateKeyPath" : "file:///greengrass/certs/hash.private.key",
           "certificatePath" : "file:///greengrass/certs/hash.cert.pem"
         },
         "SecretsManager" : {
           "privateKeyPath" : "file:///greengrass/certs/hash.private.key"
         }
       },    
       "caPath" : "file:///greengrass/certs/root.ca.pem"
     }
   }
   ```
**nota**  
Para utilizar las actualizaciones over-the-air (OTA) con la seguridad del hardware, el `PKCS11` objeto también debe contener la `OpenSSLEngine` propiedad. Para obtener más información, consulte [Configure el soporte para las actualizaciones over-the-air](hardware-security.md#hardware-security-ota-updates).

1. Edite el objeto `crypto`:

   1. Configure el objeto `PKCS11`.
      + En `P11Provider`, introduzca la ruta completa a `libsofthsm2.so`.
      + En `slotLabel`, introduzca `greengrass`.
      + En `slotUserPin`, introduzca `1234`.

   1. Configure las rutas de clave privada en el objeto `principals`. No edite la propiedad `certificatePath`.
      + Para las propiedades de `privateKeyPath`, escriba la siguiente ruta RFC 7512 PKCS\$111 (que especifica la etiqueta de la clave). Haga esto para los principales de `IoTCertificate`, `SecretsManager` y `MQTTServerCertificate`.

        ```
        pkcs11:object=iotkey;type=private
        ```

   1. Compruebe el objeto `crypto`. Debería parecerse a lo que sigue:

      ```
        "crypto": {
          "PKCS11": {
            "P11Provider": "/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so",
            "slotLabel": "greengrass",
            "slotUserPin": "1234"
          },
          "principals": {
            "MQTTServerCertificate": {
              "privateKeyPath": "pkcs11:object=iotkey;type=private"
            },
            "SecretsManager": {
              "privateKeyPath": "pkcs11:object=iotkey;type=private"
            },
            "IoTCertificate": {
              "certificatePath": "file://certs/core.crt",
              "privateKeyPath": "pkcs11:object=iotkey;type=private"
            }
          },
          "caPath": "file://certs/root.ca.pem"
        }
      ```

1. Elimine los valores `caPath`, `certPath` y `keyPath` del objeto `coreThing`. Debería parecerse a lo que sigue:

   ```
   "coreThing" : {
     "thingArn" : "arn:partition:iot:region:account-id:thing/core-thing-name",
     "iotHost" : "host-prefix-ats.iot.region.amazonaws.com",
     "ggHost" : "greengrass-ats.iot.region.amazonaws.com",
     "keepAlive" : 600
   }
   ```

**nota**  
Para este tutorial, debe especificar la misma clave privada para todos los principales. Para obtener más información acerca de cómo elegir la clave privada del servidor MQTT local, consulte [Performance](hardware-security.md#hsm-performance). Para obtener más información sobre el Secrets Manager local, consulte [Despliega los secretos hasta la AWS IoT Greengrass médula](secrets.md).

## Probar la configuración
<a name="softhsm-test"></a>
+ Iniciar el daemon de Greengrass.

  ```
  cd /greengrass/ggc/core/
  sudo ./greengrassd start
  ```

  Si el daemon se inicia correctamente, su núcleo se ha configurado correctamente.

  Ahora está listo para obtener más información acerca de la especificación de PKCS\$111 y realizar las pruebas iniciales con la API de PKCS\$111 que se proporciona en la implementación de SoftHSM.
**importante**  
De nuevo, es muy importante tener en cuenta que este módulo está diseñado para el aprendizaje y las pruebas únicamente. En realidad no aumenta la seguridad general del entorno de Greengrass.  
En lugar de ello, el objetivo del módulo es permitirle comenzar a aprender y realizar pruebas como preparación para utilizar un auténtico HSM basado en hardware en el futuro. Todo ese tiempo, debe probar su software frente a HSM basado en hardware por separado y por completo antes de cualquier uso en producción, ya que es posible que haya diferencias entre la implementación de PKCS\$111 proporcionada en SoftHSM y una implementación basada en hardware.

## Véase también
<a name="console-mod7-see-also"></a>
+ *PKCS \$111 Cryptographic Token Interface Usage Guide Version 2.40*. Editado por John Leiseboer y Robert Griffin. 16 de noviembre de 2014. Nota 02 del Comité OASIS. [http://docs.oasis-open. org/pkcs11/pkcs11-ug/v2.40/cn02/pkcs11-ug-v2.40-cn02.html](http://docs.oasis-open.org/pkcs11/pkcs11-ug/v2.40/cn02/pkcs11-ug-v2.40-cn02.html). [Última versión: http://docs.oasis-open. org/pkcs11/pkcs11-ug/v2.40/pkcs11-ug-v2.40.html](http://docs.oasis-open.org/pkcs11/pkcs11-ug/v2.40/pkcs11-ug-v2.40.html).
+ [RFC 7512](https://tools.ietf.org/html/rfc7512)