El conjunto de documentos para este producto aspira al uso de un lenguaje no discriminatorio. A los fines de esta documentación, "no discriminatorio" se refiere al lenguaje que no implica discriminación por motivos de edad, discapacidad, género, identidad de raza, identidad étnica, orientación sexual, nivel socioeconómico e interseccionalidad. Puede haber excepciones en la documentación debido al lenguaje que se encuentra ya en las interfaces de usuario del software del producto, el lenguaje utilizado en función de la documentación de la RFP o el lenguaje utilizado por un producto de terceros al que se hace referencia. Obtenga más información sobre cómo Cisco utiliza el lenguaje inclusivo.
Cisco ha traducido este documento combinando la traducción automática y los recursos humanos a fin de ofrecer a nuestros usuarios en todo el mundo contenido en su propio idioma. Tenga en cuenta que incluso la mejor traducción automática podría no ser tan precisa como la proporcionada por un traductor profesional. Cisco Systems, Inc. no asume ninguna responsabilidad por la precisión de estas traducciones y recomienda remitirse siempre al documento original escrito en inglés (insertar vínculo URL).
Este documento describe detalladamente cómo crear y utilizar paquetes firmados en la plataforma IOx.
Cisco recomienda que tenga conocimiento sobre estos temas:
La información que contiene este documento se basa en las siguientes versiones de software y hardware.
La información que contiene este documento se creó a partir de los dispositivos en un ambiente de laboratorio específico. Todos los dispositivos que se utilizan en este documento se pusieron en funcionamiento con una configuración verificada (predeterminada). If your network is live, make sure that you understand the potential impact of any command.
Desde la versión IOx, se admite la firma de paquetes de aplicaciones AC5. Esta función permite garantizar que el paquete de la aplicación es válido y que el instalado en el dispositivo se obtiene de una fuente de confianza. Si la validación de firmas del paquete de aplicaciones está activada en una plataforma, sólo se podrán implementar las aplicaciones firmadas.
Estos pasos son necesarios para utilizar la validación de la firma del paquete:
Nota: Para este artículo, se utiliza una CA autofirmada en un escenario de producción. La mejor opción es utilizar una CA oficial o la CA de su empresa para firmar.
Nota: Las opciones para la CA, las claves y las firmas se eligen únicamente para fines de laboratorio y es posible que deban ajustarse en función de su entorno.
El primer paso es crear su propia CA. Esto se puede hacer simplemente generando una clave para la CA y un certificado para esa clave:
Para generar la clave de CA:
[jedepuyd@KJK-SRVIOT-10 signing]$ openssl genrsa -out rootca-key.pem 2048 Generating RSA private key, 2048 bit long modulus .........................................................................................+++ .......+++ e is 65537 (0x10001)
Para generar el certificado de la CA:
[jedepuyd@KJK-SRVIOT-10 signing]$ openssl req -x509 -new -nodes -key rootca-key.pem -sha256 -days 4096 -out rootca-cert.pem You are about to be asked to enter information that is incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name (DN). There are quite a few fields but you can leave some blank For some fields there can be a default value, If you enter '.', the field can be left blank. ----- Country Name (2 letter code) [XX]:BE State or Province Name (full name) []:WVL Locality Name (eg, city) [Default City]:Kortrijk Organization Name (eg, company) [Default Company Ltd]:Cisco Organizational Unit Name (eg, section) []:IOT Common Name (eg, your name or your server's hostname) []:ioxrootca Email Address []:
Los valores del certificado de la CA deben ajustarse para que coincidan con su caso práctico.
Ahora que tiene la clave y el certificado necesarios para su CA, puede crear un paquete de anclaje de confianza para utilizarlo en su dispositivo IOx. El paquete de anclaje de confianza debe contener la cadena completa de firma de CA (en caso de que se utilice un certificado intermedio para la firma) y un archivo info.txt que se utiliza para proporcionar los metadatos (de forma libre).
En primer lugar, cree el archivo info.txt y coloque algunos metadatos en él:
[jedepuyd@KJK-SRVIOT-10 signing]$ echo "iox app root ca v1">info.txt
De manera opcional, si tiene varios certificados de CA, para formar la cadena de certificados de CA, debe agruparlos en un .pem:
cat first_cert.pem second_cert.pem > combined_cert.pem
Nota: Este paso no es necesario para este artículo, ya que se utiliza un único certificado raíz de CA para el signo directo, no se recomienda para la producción y el par de claves de CA raíz siempre se debe almacenar sin conexión.
La cadena de certificados de la CA debe denominarse ca-chain.cert.pem, por lo que debe preparar este archivo:
[jedepuyd@KJK-SRVIOT-10 signing]$ cp rootca-cert.pem ca-chain.cert.pem
Finalmente, puede combinar ca-chain.cert.pem e info.txt en un tar comprimido:
[jedepuyd@KJK-SRVIOT-10 signing]$ tar -czf trustanchorv1.tar.gz ca-chain.cert.pem info.txt
El trustanchorv1.tar.gz que creó en el paso anterior debe importarse en su dispositivo IOx. Los archivos del paquete se utilizan para comprobar si una aplicación se firmó con un certificado firmado por CA de la CA correcta antes de permitir una instalación.
La importación del ancla de confianza se puede realizar a través del cliente biológico:
[jedepuyd@KJK-SRVIOT-10 signing]$ ioxclient platform signedpackages trustanchor set trustanchorv1.tar.gz Currently active profile : default Command Name: plt-sign-pkg-ta-set Response from the server: Imported trust anchor file successfully [jedepuyd@KJK-SRVIOT-10 signing]$ ioxclient platform signedpackages enable Currently active profile : default Command Name: plt-sign-pkg-enable Successfully updated the signed package deployment capability on the device to true
Otra opción es importar el anclaje de confianza a través del Administrador local:
Vaya a System Setting > Import Trust Anchor como se muestra en la imagen.

Seleccione el archivo generado en el paso 2 y haga clic en Aceptar como se muestra en la imagen.

Después de haber importado correctamente el anclaje de confianza, marque Habilitado para Validación de Firma de Aplicación y haga clic en Guardar Configuración como se muestra en la imagen:

A continuación, puede crear un par de clave y certificado que se utilice para iniciar sesión en la aplicación IOx. La práctica recomendada es generar un par de claves específico para cada aplicación que planee implementar.
Siempre y cuando cada uno de ellos esté firmado con la misma CA, todos se consideran válidos.
Para generar la clave específica de la aplicación:
[jedepuyd@KJK-SRVIOT-10 signing]$ openssl genrsa -out app-key.pem 2048 Generating RSA private key, 2048 bit long modulus .......+++ ...+++ e is 65537 (0x10001)
Para generar la CSR:
[jedepuyd@KJK-SRVIOT-10 signing]$ openssl req -new -key app-key.pem -out app.csr You are about to be asked to enter information that is incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name (DN). There are quite a few fields but you can leave some blank. For some fields there can be a default value, If you enter '.', the field can be left blank. ----- Country Name (2 letter code) [XX]:BE State or Province Name (full name) []:WVL Locality Name (eg, city) [Default City]:Kortrijk Organization Name (eg, company) [Default Company Ltd]:Cisco Organizational Unit Name (eg, section) []:IOT Common Name (eg, your name or your server's hostname) []:ioxapp Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Al igual que con la CA, los valores del certificado de aplicación se deben ajustar para que coincidan con su caso práctico.
Ahora que tiene los requisitos para su CA y CSR de aplicación, puede firmar el CSR con el uso de CA. El resultado es un certificado firmado específico de la aplicación:
[jedepuyd@KJK-SRVIOT-10 signing]$ openssl x509 -req -in app.csr -CA rootca-cert.pem -CAkey rootca-key.pem -CAcreateserial -out app-cert.pem -days 4096 -sha256 Signature ok subject=/C=BE/ST=WVL/L=Kortrijk/O=Cisco/OU=IOT/CN=ioxapp Getting CA Private Key
En este punto, estará listo para empaquetar la aplicación IOx y firmarla con el par de claves generado del paso 4 y firmado por la CA en el paso 5.
El resto del proceso para crear el origen y package.yaml para su aplicación permanece sin cambios.
aplicación IOx del paquete con el uso del par de claves:
[jedepuyd@KJK-SRVIOT-10 iox_docker_pythonsleep]$ ioxclient package --rsa-key ../signing/app-key.pem --certificate ../signing/app-cert.pem . Currently active profile : default Command Name: package Using rsa key and cert provided via command line to sign the package Checking if package descriptor file is present.. Validating descriptor file /home/jedepuyd/iox/iox_docker_pythonsleep/package.yaml with package schema definitions Parsing descriptor file.. Found schema version 2.2 Loading schema file for version 2.2 Validating package descriptor file.. File /home/jedepuyd/iox/iox_docker_pythonsleep/package.yaml is valid under schema version 2.2 Created Staging directory at : /tmp/666018803 Copying contents to staging directory Checking for application runtime type Couldn't detect application runtime type Creating an inner envelope for application artifacts Excluding .DS_Store Generated /tmp/666018803/artifacts.tar.gz Calculating SHA1 checksum for package contents.. Package MetaData file was not found at /tmp/666018803/.package.metadata Wrote package metadata file : /tmp/666018803/.package.metadata Root Directory : /tmp/666018803 Output file: /tmp/096960694 Path: .package.metadata SHA1 : 2a64461a921c2d5e8f45e92fe203127cf8a06146 Path: artifacts.tar.gz SHA1 : 63da3eb3d81e13249b799bf57845f3fc9f6f2f94 Path: package.yaml SHA1 : 0e6259e49ff22d6d38e6d1913759c5674c5cec6d Generated package manifest at package.mf Signed the package and the signature is available at package.cert Generating IOx Package.. Package generated at /home/jedepuyd/iox/iox_docker_pythonsleep/package.tar
El último paso del proceso sería implementar la aplicación en su dispositivo IOx. No hay diferencia en comparación con una implementación de aplicación sin firmar:
[jedepuyd@KJK-SRVIOT-10 iox_docker_pythonsleep]$ ioxclient app install test package.tar Currently active profile : default Command Name: application-install Saving current configuration Installation Successful. App is available at : https://10.50.215.248:8443/iox/api/v2/hosting/apps/test Successfully deployed
Utilize esta sección para confirmar que su configuración funcione correctamente.
Para comprobar si una clave de aplicación está firmada correctamente con la CA, puede hacer lo siguiente:
[jedepuyd@KJK-SRVIOT-10 signing]$ openssl verify -CAfile rootca-cert.pem app-cert.pem app-cert.pem: OK
En esta sección se brinda información que puede utilizar para resolver problemas en su configuración.
Cuando experimenta problemas con la implementación de aplicaciones, puede ver uno de estos errores:
[jedepuyd@KJK-SRVIOT-10 iox_docker_pythonsleep]$ ioxclient app install test package.tar
Currently active profile : default
Command Name: application-install
Saving current configuration
Could not complete your command : Error. Server returned 500
{
"description": "Invalid Archive file: Certificate verification failed: [18, 0, 'self signed certificate']",
"errorcode": -1,
"message": "Invalid Archive file"
}
Se produjo un error al firmar el certificado de aplicación con el uso de la CA o no coincide con el del paquete de anclaje de confianza.
Utilice las instrucciones mencionadas en la sección Verificar para comprobar sus certificados y también el paquete de anclaje de confianza.
Estos errores indican que su paquete no fue firmado correctamente, puede consultar el Paso 6. nuevamente.
[jedepuyd@KJK-SRVIOT-10 iox_docker_pythonsleep]$ ioxclient app install test2 package.tar
Currently active profile : default
Command Name: application-install
Saving current configuration
Could not complete your command : Error. Server returned 500
{
"description": "Package signature file package.cert or package.sign not found in package",
"errorcode": -1009,
"message": "Error during app installation"
}
Comentarios