Dans le cadre de la documentation associée à ce produit, nous nous efforçons d’utiliser un langage exempt de préjugés. Dans cet ensemble de documents, le langage exempt de discrimination renvoie à une langue qui exclut la discrimination en fonction de l’âge, des handicaps, du genre, de l’appartenance raciale de l’identité ethnique, de l’orientation sexuelle, de la situation socio-économique et de l’intersectionnalité. Des exceptions peuvent s’appliquer dans les documents si le langage est codé en dur dans les interfaces utilisateurs du produit logiciel, si le langage utilisé est basé sur la documentation RFP ou si le langage utilisé provient d’un produit tiers référencé. Découvrez comment Cisco utilise le langage inclusif.
Cisco a traduit ce document en traduction automatisée vérifiée par une personne dans le cadre d’un service mondial permettant à nos utilisateurs d’obtenir le contenu d’assistance dans leur propre langue. Il convient cependant de noter que même la meilleure traduction automatisée ne sera pas aussi précise que celle fournie par un traducteur professionnel.
Ce document décrit en détail comment créer et utiliser des paquets signés sur la plate-forme IOx.
Cisco vous recommande de prendre connaissance des rubriques suivantes :
Les informations contenues dans ce document sont basées sur les versions de matériel et de logiciel suivantes :
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.
Depuis la version IOx, la signature du package d'application AC5 est prise en charge. Cette fonctionnalité permet de s'assurer que le package d'application est valide et que celui installé sur le périphérique provient d'une source fiable. Si la validation de signature du package d'application est activée sur une plate-forme, seules les applications signées peuvent être déployées.
Ces étapes sont requises pour utiliser la validation de signature de package :
Note: Pour cet article, une CA autosignée est utilisée dans un scénario de production. La meilleure option est d'utiliser une autorité de certification officielle ou l'autorité de certification de votre société pour signer.
Note: Les options de l'autorité de certification, des clés et des signatures sont choisies uniquement à des fins de travaux pratiques et peuvent devoir être adaptées à votre environnement.
La première étape consiste à créer votre propre CA. Pour ce faire, il suffit de générer une clé pour l'autorité de certification et un certificat pour cette clé :
Afin de générer la clé 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)
Afin de générer le certificat d'autorité de certification :
[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 []:
Les valeurs du certificat CA doivent être ajustées pour correspondre à votre cas d'utilisation.
Maintenant que vous disposez de la clé et du certificat nécessaires pour votre autorité de certification, vous pouvez créer un bundle d'ancre de confiance à utiliser sur votre périphérique IOx. L'ensemble d'ancrages d'approbation doit contenir la chaîne de signature de l'autorité de certification complète (dans le cas où un certificat intermédiaire est utilisé pour la signature) et un fichier info.txt qui est utilisé pour fournir les métadonnées (formulaire libre).
Tout d'abord, créez le fichier info.txt et mettez-y quelques métadonnées :
[jedepuyd@KJK-SRVIOT-10 signing]$ echo "iox app root ca v1">info.txt
Si vous avez éventuellement plusieurs certificats CA, pour former votre chaîne de certificats CA, vous devez les assembler en un seul .pem :
cat first_cert.pem second_cert.pem > combined_cert.pem
Note: Cette étape n'est pas requise pour cet article, car un certificat racine d'autorité de certification unique est utilisé pour le signe direct, ce n'est pas recommandé pour la production et la paire de clés d'autorité de certification racine doit toujours être stockée hors connexion.
La chaîne de certificats CA doit être nommée ca-chain.cert.pem. Préparez donc ce fichier :
[jedepuyd@KJK-SRVIOT-10 signing]$ cp rootca-cert.pem ca-chain.cert.pem
Enfin, vous pouvez combiner les fichiers ca-chain.cert.pem et info.txt dans un tar compressé :
[jedepuyd@KJK-SRVIOT-10 signing]$ tar -czf trustanchorv1.tar.gz ca-chain.cert.pem info.txt
Le fichier trustanchorv1.tar.gz que vous avez créé à l'étape précédente doit être importé sur votre périphérique IOx. Les fichiers du bundle sont utilisés pour vérifier si une application a été signée avec un certificat signé par l'autorité de certification appropriée avant d'autoriser une installation.
L'importation de l'ancre de confiance peut être effectuée via l'indicateur :
[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
Une autre option consiste à importer l'ancrage d'approbation via Local Manager :
Accédez à System Setting > Import Trust Anchor comme indiqué dans l'image.
Sélectionnez le fichier que vous avez généré à l'étape 2. et cliquez sur OK comme indiqué dans l'image.
Après avoir importé correctement l'ancrage d'approbation, cochez Enabled for Application Signing Validation et cliquez sur Save Configuration comme indiqué dans l'image :
Ensuite, vous pouvez créer une paire de clés et de certificats utilisée pour vous connecter à votre application IOx. La meilleure pratique consiste à générer une paire de clés spécifique pour chaque application que vous prévoyez de déployer.
Tant que chacun de ces documents est signé avec la même autorité de certification, ils sont tous considérés comme valides.
Afin de générer la clé spécifique à l'application :
[jedepuyd@KJK-SRVIOT-10 signing]$ openssl genrsa -out app-key.pem 2048 Generating RSA private key, 2048 bit long modulus .......+++ ...+++ e is 65537 (0x10001)
Afin de générer le 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 []:
Comme pour l'autorité de certification, les valeurs du certificat de demande doivent être ajustées pour correspondre à votre cas d'utilisation.
Maintenant que vous avez les conditions requises pour votre CA et votre application CSR, vous pouvez signer le CSR avec l'utilisation de CA. Le résultat est un certificat spécifique à l'application signé :
[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
À ce stade, vous êtes prêt à emballer votre application IOx et à la signer avec la paire de clés générée à l'étape 4. et signé par l'autorité de certification à l'étape 5.
Le reste du processus de création de la source et de package.yaml pour votre application reste inchangé.
application IOx de package avec l'utilisation de la paire de clés :
[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
La dernière étape du processus consiste à déployer l'application sur votre périphérique IOx. Il n'y a aucune différence par rapport à un déploiement d'application non signé :
[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
Utilisez cette section pour confirmer que votre configuration fonctionne correctement.
Afin de vérifier si une clé d'application est correctement signée avec votre autorité de certification, vous pouvez faire ceci :
[jedepuyd@KJK-SRVIOT-10 signing]$ openssl verify -CAfile rootca-cert.pem app-cert.pem app-cert.pem: OK
Cette section fournit des informations que vous pouvez utiliser pour dépanner votre configuration.
Lorsque vous rencontrez des problèmes avec le déploiement d'applications, vous pouvez voir l'une des erreurs suivantes :
[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" }
Un problème s'est produit lors de la signature du certificat d'application avec l'utilisation de l'autorité de certification ou il ne correspond pas à celui du bundle d'ancrage approuvé.
Utilisez les instructions mentionnées dans la section Vérifier pour vérifier vos certificats et également l'ensemble d'ancres de confiance.
Cette erreur indique que votre paquet n'a pas été signé correctement, vous pouvez regarder dans l'étape 6. encore une fois.
[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" }