La documentazione per questo prodotto è stata redatta cercando di utilizzare un linguaggio senza pregiudizi. Ai fini di questa documentazione, per linguaggio senza di pregiudizi si intende un linguaggio che non implica discriminazioni basate su età, disabilità, genere, identità razziale, identità etnica, orientamento sessuale, status socioeconomico e intersezionalità. Le eventuali eccezioni possono dipendere dal linguaggio codificato nelle interfacce utente del software del prodotto, dal linguaggio utilizzato nella documentazione RFP o dal linguaggio utilizzato in prodotti di terze parti a cui si fa riferimento. Scopri di più sul modo in cui Cisco utilizza il linguaggio inclusivo.
Cisco ha tradotto questo documento utilizzando una combinazione di tecnologie automatiche e umane per offrire ai nostri utenti in tutto il mondo contenuti di supporto nella propria lingua. Si noti che anche la migliore traduzione automatica non sarà mai accurata come quella fornita da un traduttore professionista. Cisco Systems, Inc. non si assume alcuna responsabilità per l’accuratezza di queste traduzioni e consiglia di consultare sempre il documento originale in inglese (disponibile al link fornito).
In questo documento viene descritto in modo dettagliato come creare e utilizzare pacchetti firmati sulla piattaforma IOx.
Cisco raccomanda la conoscenza dei seguenti argomenti:
Le informazioni fornite in questo documento si basano sulle seguenti versioni software e hardware:
Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi.
A partire dalla versione IOx, è supportata la firma dei pacchetti dell'applicazione AC5. Questa funzionalità consente di garantire che il pacchetto dell'applicazione sia valido e che quello installato nel dispositivo sia ottenuto da una fonte attendibile. Se la convalida della firma del pacchetto dell'applicazione è attivata in una piattaforma, è possibile distribuire solo le applicazioni firmate.
Per utilizzare la convalida della firma del pacchetto, è necessario eseguire i passaggi seguenti:
Nota: Per questo articolo, in uno scenario di produzione viene utilizzata una CA autofirmata. L'opzione migliore consiste nell'utilizzare un'autorità di certificazione ufficiale o l'autorità di certificazione della società per firmare.
Nota: Le opzioni per la CA, le chiavi e le firme vengono scelte solo per scopi di laboratorio e potrebbe essere necessario modificarle in base all'ambiente.
Il primo passaggio consiste nella creazione di una CA personalizzata. A tale scopo, è sufficiente generare una chiave per la CA e un certificato per tale chiave:
Per generare la chiave 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)
Per generare il certificato 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 []:
I valori nel certificato CA devono essere regolati in modo da corrispondere allo Use Case.
Ora che si dispone della chiave e del certificato necessari per la CA, è possibile creare un pacchetto trust anchor da utilizzare sul dispositivo IOx. Il bundle trust anchor deve contenere la catena di firma CA completa (nel caso in cui per la firma vengano utilizzati certificati intermedi) e un file info.txt utilizzato per fornire i metadati (in formato libero).
Creare innanzitutto il file info.txt e inserirvi alcuni metadati:
[jedepuyd@KJK-SRVIOT-10 signing]$ echo "iox app root ca v1">info.txt
Facoltativamente, se si dispone di più certificati CA, per formare la catena di certificati CA è necessario riunirli in un unico file con estensione pem:
cat first_cert.pem second_cert.pem > combined_cert.pem
Nota: Questo passaggio non è necessario per questo articolo, poiché per la firma diretta viene utilizzato un singolo certificato radice CA, questa operazione non è consigliata per la produzione e la coppia di chiavi radice CA deve essere sempre archiviata offline.
La catena di certificati CA deve essere denominata ca-chain.cert.pem. Preparare il file:
[jedepuyd@KJK-SRVIOT-10 signing]$ cp rootca-cert.pem ca-chain.cert.pem
Infine, è possibile combinare ca-chain.cert.pem e info.txt in un tar compresso:
[jedepuyd@KJK-SRVIOT-10 signing]$ tar -czf trustanchorv1.tar.gz ca-chain.cert.pem info.txt
Il file trustanchorv1.tar.gz creato nel passaggio precedente deve essere importato nel dispositivo IOx. I file nel bundle vengono utilizzati per verificare se un'applicazione è stata firmata con un certificato CA dalla CA corretta prima di consentire un'installazione.
L'importazione del trust anchor può essere eseguita tramite ioxlcient:
[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
Un'altra opzione consiste nell'importare il trust anchor tramite Gestione locale:
Passare a Impostazioni di sistema > Importa trust anchor come mostrato nell'immagine.
Selezionare il file generato al punto 2 e fare clic su OK come mostrato nell'immagine.
Dopo aver importato correttamente il trust anchor, selezionare Enabled (Attivato) per Convalida firma applicazione e fare clic su Save Configuration (Salva configurazione) come mostrato nell'immagine:
È quindi possibile creare una coppia di chiavi e certificati da utilizzare per accedere all'applicazione IOx. È consigliabile generare una coppia di chiavi specifica per ogni applicazione che si intende distribuire.
Finché sono firmate con la stessa CA, tutte sono considerate valide.
Per generare la chiave specifica dell'applicazione:
[jedepuyd@KJK-SRVIOT-10 signing]$ openssl genrsa -out app-key.pem 2048 Generating RSA private key, 2048 bit long modulus .......+++ ...+++ e is 65537 (0x10001)
Per generare la RSI:
[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 []:
Come per la CA, i valori nel certificato dell'applicazione devono essere adattati in base allo Use Case.
Dopo avere definito i requisiti per la CA e il CSR dell'applicazione, è possibile firmare il CSR utilizzando CA. Il risultato è un certificato firmato specifico dell'applicazione:
[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
A questo punto, è possibile creare il pacchetto dell'applicazione IOx e firmarla con la coppia di chiavi generata dal passaggio 4. e firmata dalla CA nel passaggio 5.
Il resto del processo di creazione dell'origine e del package.yaml per l'applicazione rimane invariato.
creare il pacchetto dell'applicazione IOx con l'utilizzo della coppia di chiavi:
[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
L'ultimo passaggio consiste nella distribuzione dell'applicazione sul dispositivo IOx. Non esistono differenze rispetto a una distribuzione di applicazioni non firmate:
[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
Fare riferimento a questa sezione per verificare che la configurazione funzioni correttamente.
Per verificare che una chiave dell'applicazione sia firmata correttamente con la CA, eseguire questa operazione:
[jedepuyd@KJK-SRVIOT-10 signing]$ openssl verify -CAfile rootca-cert.pem app-cert.pem app-cert.pem: OK
Le informazioni contenute in questa sezione permettono di risolvere i problemi relativi alla configurazione.
Quando si verificano problemi con la distribuzione delle applicazioni, è possibile che si verifichi uno dei seguenti errori:
[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" }
Si è verificato un errore durante la firma del certificato dell'applicazione con l'utilizzo della CA o il certificato non corrisponde a quello nel bundle di ancoraggio attendibile.
Utilizzare le istruzioni indicate nella sezione Verifica per controllare i certificati e anche il pacchetto di ancoraggio attendibile.
Questo errore indica che il pacchetto non è stato firmato correttamente. È possibile esaminare di nuovo il passaggio 6.
[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" }