AWS IoT Greengrass Version 1 entrou na fase de vida útil prolongada em 30 de junho de 2023. Para obter mais informações, consulte política de manutenção do AWS IoT Greengrass V1. Após essa data, AWS IoT Greengrass V1 não lançaremos atualizações que forneçam recursos, aprimoramentos, correções de erros ou patches de segurança. Os dispositivos que funcionam AWS IoT Greengrass V1 não serão interrompidos e continuarão operando e se conectando à nuvem. É altamente recomendável que você migre para AWS IoT Greengrass Version 2, o que adiciona novos recursos significativos e suporte para plataformas adicionais.
As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Módulo 7: Simular a integração de segurança de hardware
Esse atributo está disponível para o AWS IoT Greengrass Core v1.7 e posterior.
Esse módulo avançado mostra como configurar a simulação de um módulo de segurança de hardware (HSM) para uso com um núcleo do Greengrass. A configuração usa SoftHSM puro, que é uma implementação de software de PKCS#11 que usa a interface de programação de aplicativo (API). O objetivo deste módulo é permitir que você configure um ambiente no qual você pode aprender e fazer testes iniciais em uma implementação apenas para software da API do PKCS#11. Ele é fornecido apenas para fins de aprendizagem e testes iniciais, não é destinado a nenhum uso para produção.
Você pode usar esta configuração para teste usando um serviço compatível com PKCS#11 a fim de armazenar suas chaves privadas. Para obter mais informações sobre a implementação somente para software, consulte SoftHSM
Importante
Este módulo é destinado somente a fins de experimentos. Não recomendamos em hipótese alguma o uso de SoftHSM em um ambiente de produção, pois ele pode fornecer uma falsa sensação de segurança adicional. A configuração resultante não fornece todos os benefícios de segurança reais. As chaves armazenadas em SoftHSM não são armazenadas com mais segurança do que qualquer outro meio de armazenamento de segredos no ambiente do Greengrass.
O objetivo deste módulo é permitir que você saiba mais sobre a especificação PKCS#11 e que faça testes iniciais do seu software se, futuramente, você planejar usar um HSM com base em hardware real
Você deve testar sua implementação futura de hardware de forma separada e completa antes de qualquer uso de produção, pois pode haver diferenças entre a implementação PKCS#11 fornecida no SoftHSM e uma implementação baseada em hardware.
Se você precisar de assistência com a integração de um módulo de segurança de hardware compatível, entre em contato com seu representante da AWS Enterprise Support.
Antes de começar, execute o script de configuração do dispositivo do Greengrass ou verifique se você concluiu o módulo 1 e o módulo 2 do tutorial Conceitos básicos. Neste módulo, partimos do princípio de que o núcleo já está provisionado e se comunicando com a AWS. Este modulo levará aproximadamente 30 minutos para ser concluído.
Instalar o software SoftHSM
Nesta etapa, você instala o SoftHSM e as ferramentas pkcs11, que são usados para gerenciar sua instância SoftHSM.
-
Em um terminal do seu dispositivo de núcleo AWS IoT Greengrass, execute o seguinte comando:
sudo apt-get install softhsm2 libsofthsm2-dev pkcs11-dump
Para obter mais informações sobre esses pacotes, consulte Instalar softhsm2
, Instalar libsofthsm2-dev , e Instalar pkcs11-despejo . nota
Se você encontrar problemas ao usar esse comando no seu sistema, consulte SoftHSM versão 2
no GitHub. Esse site fornece mais informações de instalação, incluindo a criação a partir do código-fonte.
Configure o SoftHSM
Nesta etapa, você configura o SoftHSM
-
Mude para o usuário raiz.
sudo su
-
Use a página do manual para encontrar o
softhsm2.conf
no âmbito do sistema local. Um local comum é/etc/softhsm/softhsm2.conf
, mas a localização pode ser diferente em alguns sistemas.man softhsm2.conf
-
Crie o diretório para o arquivo de configuração softhsm2 no âmbito do sistema local. Neste exemplo, supomos que o local é
/etc/softhsm/softhsm2.conf
.mkdir -p /etc/softhsm
-
Crie o diretório do token no diretório
/greengrass
.nota
Se esta etapa for ignorada, o softhsm2-util relatará
ERROR: Could not initialize the library
.mkdir -p /greengrass/softhsm2/tokens
-
Configure o diretório do token.
echo "directories.tokendir = /greengrass/softhsm2/tokens" > /etc/softhsm/softhsm2.conf
-
Configure um back-end baseado em arquivo.
echo "objectstore.backend = file" >> /etc/softhsm/softhsm2.conf
nota
Essas definições de configuração são projetadas para fins de experimentação apenas. Para consultar todas as opções de configuração, leia a página do manual para o arquivo de configuração.
man softhsm2.conf
Importar a chave privada para o SoftHSM
Nesta etapa, você inicialize o token do SoftHSM, converte a chave privada e, em seguida, importa a chave privada.
-
Inicialize o token do SoftHSM.
softhsm2-util --init-token --slot 0 --label greengrass --so-pin 12345 --pin 1234
nota
Se solicitado, insira um pin de SO
12345
e um pin de usuário de1234
. O AWS IoT Greengrass não usa o pin de SO (supervisor), portanto, você pode utilizar qualquer valor.Se você receber o erro
CKR_SLOT_ID_INVALID: Slot 0 does not exist
, tente o seguinte comando em vez disso:softhsm2-util --init-token --free --label greengrass --so-pin 12345 --pin 1234
-
Converta a chave privada em um formato que possa ser usado pela ferramenta de importação do SoftHSM. Para este tutorial, converta a chave privada obtida na opção Default Group creation (Criação de grupo padrão) no Módulo 2 do tutorial de Conceitos básicos.
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in
hash
.private.key -outhash
.private.pem -
Importar a chave privada para o SoftHSM. Execute apenas um dos seguintes comandos, dependendo da sua versão do softhsm2-util.
- Raspbian softhsm2-util sintaxe v2.2.0
-
softhsm2-util --import hash.private.pem --token greengrass --label iotkey --id 0000 --pin 12340
- Ubuntu softhsm2-util sintaxe v2.0.0
-
softhsm2-util --import hash.private.pem --slot 0 --label iotkey --id 0000 --pin 1234
Esse comando identifica o slot como
0
e define o rótulo de chave comoiotkey
. Você usa esses valores na próxima seção.
Após a chave privada ser importada, você tem a opção de removê-la do diretório /greengrass/certs
. Certifique-se de manter a CA raiz e os certificados do dispositivo no diretório.
Configurar o núcleo do Greengrass para usar o SoftHSM
Nesta etapa, você modifica o arquivo de configuração do núcleo do Greengrass para usar o SoftHSM.
Encontre o caminho para a biblioteca do provedor SoftHSM (
libsofthsm2.so
) no seu sistema:Obtenha a lista de pacotes instalados para a biblioteca.
sudo dpkg -L libsofthsm2
O arquivo
libsofthsm2.so
está localizado no diretóriosofthsm
.Copiar o caminho completo para o arquivo (por exemplo,
/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so
). Você usará esse valor posteriormente.
Pare o daemon do Greengrass.
cd /greengrass/ggc/core/ sudo ./greengrassd stop
Abra o arquivo de configuração do Greengrass. Este é o arquivo config.json no diretório
/greengrass/config
.nota
Os exemplos neste procedimento são gravados com a suposição de que o arquivo
config.json
usa o formato gerado a com a opção Default Group creation (Criação de grupo padrão) no Módulo 2 do tutorial de Conceitos básicos.-
No objeto
crypto.principals
, insira o seguinte objeto de certificado do servidor MQTT. Adicione uma vírgula onde for preciso criar um arquivo JSON válido."MQTTServerCertificate": { "privateKeyPath": "path-to-private-key" }
-
No objeto
crypto
, insira o seguinte objeto dePKCS11
. Adicione uma vírgula onde for preciso criar um arquivo JSON válido."PKCS11": { "P11Provider": "/path-to-pkcs11-provider-so", "slotLabel": "crypto-token-name", "slotUserPin": "crypto-token-user-pin" }
O arquivo deverá ser semelhante ao seguinte:
{ "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "
hash
.cert.pem", "keyPath" : "hash
.private.key", "thingArn" : "arn:partition
:iot:region
:account-id
:thing/core-thing-name
", "iotHost" : "host-prefix
.iot.region
.amazonaws.com", "ggHost" : "greengrass.iot.region
.amazonaws.com", "keepAlive" : 600 }, "runtime" : { "cgroup" : { "useSystemd" : "yes" } }, "managedRespawn" : false, "crypto": {"PKCS11": { "P11Provider": "/path-to-pkcs11-provider-so", "slotLabel": "crypto-token-name", "slotUserPin": "crypto-token-user-pin" },
"principals" : {"MQTTServerCertificate": { "privateKeyPath": "path-to-private-key" },
"IoTCertificate" : { "privateKeyPath" : "file:///greengrass/certs/hash
.private.key", "certificatePath" : "file:///greengrass/certs/hash
.cert.pem" }, "SecretsManager" : { "privateKeyPath" : "file:///greengrass/certs/hash
.private.key" } }, "caPath" : "file:///greengrass/certs/root.ca.pem" } }nota
Para usar atualizações OTA (over-the-air) com a segurança de hardware, o objeto
PKCS11
também deve conter a propriedadeOpenSSLEngine
. Para obter mais informações, consulte Configurar suporte para over-the-air atualizações. -
Edite o objeto
crypto
:Configure o objeto
PKCS11
.Para
P11Provider
, insira o caminho completo paralibsofthsm2.so
.Em
slotLabel
, digitegreengrass
.Em
slotUserPin
, digite1234
.
Configure os caminhos da chave privada no objeto
principals
. Não edite a propriedadecertificatePath
.Para as propriedades
privateKeyPath
, insira o seguinte caminho RFC 7512 PKCS#11 (que especifica o rótulo da chave). Faça isso para as entidades principaisIoTCertificate
,SecretsManager
, eMQTTServerCertificate
.pkcs11:object=iotkey;type=private
-
Verifique o objeto
crypto
. A aparência deve ser semelhante à seguinte:"crypto": { "PKCS11": { "P11Provider": "/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so", "slotLabel": "greengrass", "slotUserPin": "1234" }, "principals": { "MQTTServerCertificate": { "privateKeyPath": "pkcs11:object=iotkey;type=private" }, "SecretsManager": { "privateKeyPath": "pkcs11:object=iotkey;type=private" }, "IoTCertificate": { "certificatePath": "file://certs/core.crt", "privateKeyPath": "pkcs11:object=iotkey;type=private" } }, "caPath": "file://certs/root.ca.pem" }
-
Remova os valores
caPath
,certPath
ekeyPath
do objetocoreThing
. A aparência deve ser semelhante à seguinte:"coreThing" : { "thingArn" : "arn:
partition
:iot:region
:account-id
:thing/core-thing-name", "iotHost" : "host-prefix
-ats.iot.region
.amazonaws.com", "ggHost" : "greengrass-ats.iot.region
.amazonaws.com", "keepAlive" : 600 }
nota
Para este tutorial, você especifica a mesma chave privada para todas as entidades principais. Para obter mais informações sobre como escolher a chave privada para o servidor MQTT local, consulte Desempenho. Para obter mais informações sobre o secrets manager local, consulte Implantar segredos no núcleo do AWS IoT Greengrass.
Testar a configuração
Inicie o daemon do Greengrass.
cd /greengrass/ggc/core/ sudo ./greengrassd start
Se o daemon for iniciado com êxito, seu núcleo será configurado corretamente.
Agora você está pronto para saber mais sobre a especificação PKCS#11 e fazer testes iniciais com a API do PKCS#11 fornecida pela implementação do SoftHSM.
Importante
Mais uma vez, é extremamente importante saber que este módulo é destinado somente a aprendizagem e testes. Na verdade, ele não fortalece a postura de segurança do seu ambiente do Greengrass.
Em vez disso, a finalidade do módulo é permitir que você inicie a aprendizagem e os testes como preparação para usar um verdadeiro HSM baseado em hardware no futuro. Quando isso ocorrer, você deverá testar seu software em relação ao HSM baseado em hardware antes de qualquer uso de produção, pois pode haver diferenças entre a implementação PKCS#11 fornecida no SoftHSM e uma implementação baseada em hardware.
Consulte também
-
Guia de uso da interface de token criptográfico PKCS #11 Versão 2.40. Editada por John Leiseboer e Robert Griffin. 16 de novembro de 2014. OASIS Committee Note 02. http://docs.oasis-open.org/pkcs11/pkcs11-ug/v2.40/cn02/pkcs11-ug-v2.40-cn02.html
. Última versão: http://docs.oasis-open.org/pkcs11/pkcs11-ug/v2.40/pkcs11-ug-v2.40.html .