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
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
-
Cambie al usuario raíz.
sudo su
-
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
-
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
-
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
-
Configure el directorio del token.
echo "directories.tokendir = /greengrass/softhsm2/tokens" > /etc/softhsm/softhsm2.conf
-
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.
-
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 usuario1234
. 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
-
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 -outhash
.private.pem -
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 comoiotkey
. 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.
Busque la ruta de la biblioteca del proveedor de SoftHSM (
libsofthsm2.so
) en el sistema:Obtenga la lista de los paquetes instalados para la biblioteca.
sudo dpkg -L libsofthsm2
El archivo
libsofthsm2.so
se encuentra en el directoriosofthsm
.Copie la ruta completa al archivo (por ejemplo,
/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so
). Usará este valor más tarde.
Detenga el daemon de Greengrass.
cd /greengrass/ggc/core/ sudo ./greengrassd stop
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.-
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" }
-
En el objeto
crypto
, inserte el siguiente objetoPKCS11
. 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 propiedadOpenSSLEngine
. Para obtener más información, consulte Configure la compatibilidad con las actualizaciones over-the-air . -
Edite el objeto
crypto
:Configure el objeto
PKCS11
.En
P11Provider
, introduzca la ruta completa alibsofthsm2.so
.En
slotLabel
, introduzcagreengrass
.En
slotUserPin
, introduzca1234
.
Configure las rutas de clave privada en el objeto
principals
. No edite la propiedadcertificatePath
.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 deIoTCertificate
,SecretsManager
yMQTTServerCertificate
.pkcs11:object=iotkey;type=private
-
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" }
-
Elimine los valores
caPath
,certPath
ykeyPath
del objetocoreThing
. 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
-
PKCS #11 Cryptographic Token Interface Usage Guide Version 2.40. Editado por John Leiseboer y Robert Griffin. 16 de noviembre de 2014. OASIS Committee Note 02. 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 .