Módulo 7: Simulación de la integración de seguridad del hardware - AWS IoT Greengrass

AWS IoT Greengrass Version 1 entró en la fase de vida útil prolongada el 30 de junio de 2023. Para obtener más información, consulte la política de mantenimiento de AWS IoT Greengrass V1 Después de esta fecha, AWS IoT Greengrass V1 no se publicarán actualizaciones que proporcionen funciones, mejoras, correcciones de errores o parches de seguridad. Los dispositivos que se ejecuten AWS IoT Greengrass V1 no se verán afectados y seguirán funcionando y conectándose a la nube. Le recomendamos encarecidamente que migre a AWS IoT Greengrass Version 2, ya que añade importantes funciones nuevas y es compatible con plataformas adicionales.

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

Esta característica está disponible para AWS IoT Greengrass Core versión 1.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#11. 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#11. 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#11 para almacenar con sus claves privadas. Para obtener más información sobre la implementación solo de software, consulte SoftHSM. Para obtener más información acerca de la integración de seguridad de hardware en un núcleo AWS IoT Greengrass, incluidos los requisitos generales, consulte Integración de la seguridad de hardware.

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#11 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#11 proporcionada en SoftHSM y una implementación basada en hardware.

Si necesita asistencia con la incorporación de un módulo de seguridad de hardware admitido, póngase en contacto con su representante de soporte de AWS Enterprise.

Antes de comenzar, ejecute el script de configuración de dispositivos de Greengrass o asegúrese de haber completado el módulo 1 y el módulo 2 del tutorial de introducción. En este módulo, suponemos que su núcleo ya está aprovisionado y comunicándose con AWS. Completar este módulo debería tomarle aproximadamente 30 minutos.

Instalación del software SoftHSM

En este paso, se instala SoftHSM y las herramientas pkcs11, que se utilizan para administrar su instancia SoftHSM.

  • En un terminal en su dispositivo core AWS IoT Greengrass, 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, Install libsofthsm2-dev e Install pkcs11-dump.

    nota

    Si tiene problemas al utilizar este comando en su sistema, consulte SoftHSM version 2 en GitHub. Este sitio proporciona más información de la instalación, incluido cómo compilar desde el origen.

Configurar SoftHSM

En este paso, configurará SoftHSM.

  1. Cambie al usuario raíz.

    sudo su
  2. 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
  3. 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
  4. 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
  5. Configure el directorio del token.

    echo "directories.tokendir = /greengrass/softhsm2/tokens" > /etc/softhsm/softhsm2.conf
  6. 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.

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
  2. 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 del tutorial de introducción.

    openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in hash.private.key -out hash.private.pem
  3. 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

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.

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

  2. Detenga el daemon de Greengrass.

    cd /greengrass/ggc/core/ sudo ./greengrassd stop
  3. Abra el archivo de configuración de Greengrass. Este es el archivo 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 del tutorial de introducción.

  4. 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" }
  5. 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 inalámbrica (OTA) con la seguridad por hardware, el objeto PKCS11 debe contener también la propiedad OpenSSLEngine. Para obtener más información, consulte Configure la compatibilidad con las actualizaciones over-the-air .

  6. 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.

    2. 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#11 (que especifica la etiqueta de la clave). Haga esto para los principales de IoTCertificate, SecretsManager y MQTTServerCertificate.

        pkcs11:object=iotkey;type=private
    3. 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" }
  7. 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. Para obtener más información sobre el Secrets Manager local, consulte Implementación de secretos en el núcleo de AWS IoT Greengrass.

Probar la configuración

  • 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#11 y realizar las pruebas iniciales con la API de PKCS#11 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#11 proporcionada en SoftHSM y una implementación basada en hardware.

Véase también