O conjunto de documentação deste produto faz o possível para usar uma linguagem imparcial. Para os fins deste conjunto de documentação, a imparcialidade é definida como uma linguagem que não implica em discriminação baseada em idade, deficiência, gênero, identidade racial, identidade étnica, orientação sexual, status socioeconômico e interseccionalidade. Pode haver exceções na documentação devido à linguagem codificada nas interfaces de usuário do software do produto, linguagem usada com base na documentação de RFP ou linguagem usada por um produto de terceiros referenciado. Saiba mais sobre como a Cisco está usando a linguagem inclusiva.
A Cisco traduziu este documento com a ajuda de tecnologias de tradução automática e humana para oferecer conteúdo de suporte aos seus usuários no seu próprio idioma, independentemente da localização. Observe que mesmo a melhor tradução automática não será tão precisa quanto as realizadas por um tradutor profissional. A Cisco Systems, Inc. não se responsabiliza pela precisão destas traduções e recomenda que o documento original em inglês (link fornecido) seja sempre consultado.
Este documento descreve de forma detalhada como criar e usar pacotes assinados na plataforma IOx.
A Cisco recomenda que você tenha conhecimento destes tópicos:
As informações neste documento são baseadas nestas versões de software e hardware:
As informações neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos utilizados neste documento foram iniciados com uma configuração (padrão) inicial. Se a sua rede estiver ativa, certifique-se de que entende o impacto potencial de qualquer comando.
Desde a versão IOx, há suporte para assinatura de pacotes de aplicativos AC5. Este recurso permite garantir que o pacote de aplicativo seja válido e o instalado no dispositivo seja obtido de uma fonte confiável. Se a Validação de Assinatura do Pacote de Aplicativos estiver ATIVADA em uma plataforma, somente aplicativos assinados poderão ser implantados.
Estas etapas são necessárias para usar a validação de assinatura de pacote:
Note: Para este artigo, uma CA autoassinada é usada em um cenário de produção. A melhor opção é usar uma CA oficial ou a CA da sua empresa para assinar.
Note: As opções de CA, chaves e assinaturas são escolhidas somente para fins de laboratório e podem precisar ser ajustadas para o seu ambiente.
A primeira etapa é criar sua própria CA. Isso pode ser feito simplesmente pela geração de uma chave para a CA e um certificado para essa chave:
Para gerar a chave 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 gerar o certificado 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 []:
Os valores no certificado CA devem ser ajustados para corresponder ao seu caso de uso.
Agora que você tem a chave e o certificado necessários para sua autoridade de certificação, é possível criar um pacote de âncora de confiança para uso em seu dispositivo IOx. O pacote de âncora de confiança deve conter a cadeia de assinatura de CA completa (caso os certificados intermediários sejam usados para assinatura) e um arquivo info.txt que é usado para fornecer os metadados (de forma livre).
Primeiro, crie o arquivo info.txt e coloque alguns metadados nele:
[jedepuyd@KJK-SRVIOT-10 signing]$ echo "iox app root ca v1">info.txt
Opcionalmente, se você tiver vários certificados CA, para formar sua cadeia de certificados CA, você precisará reuni-los em um .pem:
cat first_cert.pem second_cert.pem > combined_cert.pem
Note: Esta etapa não é necessária para este artigo, já que um único certificado raiz de CA é usado para a assinatura direta, isso não é recomendado para produção e o par de chaves de CA raiz deve sempre ser armazenado offline.
A cadeia de certificados da autoridade de certificação precisa ser denominada ca-chain.cert.pem, portanto, prepare este arquivo:
[jedepuyd@KJK-SRVIOT-10 signing]$ cp rootca-cert.pem ca-chain.cert.pem
Finalmente, você pode combinar o ca-chain.cert.pem e info.txt em um tar gzipado:
[jedepuyd@KJK-SRVIOT-10 signing]$ tar -czf trustanchorv1.tar.gz ca-chain.cert.pem info.txt
O trustanchorv1.tar.gz que você criou na etapa anterior precisa ser importado para o seu dispositivo IOx. Os arquivos no pacote são usados para verificar se um aplicativo foi assinado com um certificado assinado pela CA correta antes de permitir uma instalação.
A importação da âncora de confiança pode ser feita por meio do componente:
[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
Outra opção é importar a âncora de confiança através do Gerenciador Local:
Navegue para Configuração do sistema > Importar âncora de confiança conforme mostrado na imagem.

Selecione o arquivo que você gerou na Etapa 2 e clique em OK, como mostrado na imagem.

Depois de importar com êxito a âncora de confiança, marque Enabled para Application Signing Validation e clique em Save Configuration como mostrado na imagem:

Em seguida, você pode criar um par de chave e certificado que é usado para entrar em seu aplicativo IOx. A prática recomendada é gerar um par de chaves específico para cada aplicativo que você planeja implantar.
Contanto que cada uma delas seja assinada com a mesma CA, todas elas serão consideradas válidas.
Para gerar a chave específica do aplicativo:
[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 gerar o 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 []:
Como no caso da CA, os valores no certificado do aplicativo devem ser ajustados para corresponder ao seu caso de uso.
Agora que você tem os requisitos para seu CA e CSR de aplicativo, você pode assinar o CSR com o uso do CA. O resultado é um certificado específico do aplicativo assinado:
[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
Neste ponto, você está pronto para empacotar seu aplicativo IOx e assiná-lo com o par de chaves gerado da Etapa 4. e assinado pela CA na Etapa 5.
O restante do processo para criar o arquivo source e package.yaml para seu aplicativo permanece inalterado.
empacotar o aplicativo IOx com o uso do par de chaves:
[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
A última etapa no processo seria implantar o aplicativo em seu dispositivo IOx. Não há diferença em comparação a uma implantação de aplicativo não assinada:
[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
Use esta seção para confirmar se a sua configuração funciona corretamente.
Para verificar se uma chave de aplicativo está assinada corretamente com sua autoridade de certificação, você pode fazer o seguinte:
[jedepuyd@KJK-SRVIOT-10 signing]$ openssl verify -CAfile rootca-cert.pem app-cert.pem app-cert.pem: OK
Esta seção disponibiliza informações para a solução de problemas de configuração.
Quando você tiver problemas com a implantação de aplicativos, poderá ver um destes erros:
[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 deu errado ao assinar o certificado do aplicativo com o uso da autoridade de certificação ou ele não corresponde ao do pacote de âncora confiável.
Use as instruções mencionadas na seção Verificar para verificar seus certificados e também o pacote de âncora confiável.
Esses erros indicam que o pacote não foi assinado corretamente. Você pode examinar a Etapa 6 novamente.
[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"
}
Feedback