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 de manera detallada 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.
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. 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 asegurarse de que el paquete de la aplicación es válido y que el que está instalado en el dispositivo se obtiene de un origen de confianza. Si la validación de firma del paquete de aplicación está activada en una plataforma, sólo se pueden 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 con fines de laboratorio y es posible que deban ajustarse para 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 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 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 CA deben ajustarse para que coincidan con el caso práctico.
Ahora que tiene la clave y el certificado necesarios para su CA, puede crear un paquete de anclaje de confianza para su uso en su dispositivo IOx. El paquete de anclaje de confianza debe contener la cadena de firma completa de CA (en caso de que se utilice el certificado intermedio para la firma) y un archivo info.txt que se utiliza para proporcionar los metadatos (de forma libre).
Primero, cree el archivo info.txt y coloque algunos metadatos en él:
[jedepuyd@KJK-SRVIOT-10 signing]$ echo "iox app root ca v1">info.txt
Opcionalmente, si tiene varios certificados de CA, para formar su cadena de certificados de CA, debe juntarlos 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 solo certificado raíz de CA para el signo directo, esto 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 CA debe llamarse ca-chain.cert.pem, así que prepare este archivo:
[jedepuyd@KJK-SRVIOT-10 signing]$ cp rootca-cert.pem ca-chain.cert.pem
Por último, puede combinar ca-chain.cert.pem e info.txt en un archivo .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 verificar 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 anclaje de confianza puede realizarse a través del cliente:
[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 Configuración del sistema > Importar anclaje de confianza como se muestra en la imagen.
Seleccione el archivo que generó 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, verifique Enabled for Application Signing Validation y haga clic en Save Configuration como se muestra en la imagen:
A continuación, puede crear un par de claves y certificados que se utiliza para iniciar sesión en la aplicación IOx. La mejor práctica es generar un par de claves específico para cada aplicación que planee implementar.
Siempre y cuando cada uno de ellos se firme con la misma CA, todos se considerarán 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 RSE:
[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 deben ajustarse para que coincidan con el 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 específico de la aplicación firmado:
[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 momento, está preparado para empaquetar su 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 la aplicación permanece inalterado.
aplicación IOx del paquete con el uso del par de llaves:
[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 verificar si una clave de aplicación está correctamente firmada con su 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" }
Algo salió mal 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 Verificación para comprobar los certificados y también el paquete de anclaje de confianza.
Este error indica que el paquete no se firmó correctamente; puede ver el Paso 6. de nuevo.
[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" }