Autenticação Segura de Dispositivos com Certificados X.509 no Eclipse Hono
Nos últimos meses, cobertura da mídia destacou dispositivos IoT inseguros que falham em atender padrões básicos de segurança. Preocupação recorrente é a confidencialidade de dados transmitidos de dispositivos a serviços na nuvem. Surpreendentemente, muitos dispositivos enviam dados por redes públicas sem criptografia, mesmo que protocolos baseados em TCP/IP como HTTP e MQTT suportem criptografia TLS.
O Eclipse Hono habilitou TLS para seus adaptadores HTTP e MQTT desde o início. O marco 0.9-M2 agora adiciona suporte para autenticação via certificado cliente X.509 durante o handshake TLS, permitindo que dispositivos usem par de chaves em vez de usuário/senha.
Chamando todos os desenvolvedores
O maior hackathon IoT da Europa retorna a Berlim em 14-15 de maio de 2023. Junte-se a 700+ desenvolvedores em desafios domain-specific, aprenda, faça networking e divirta-se.
Neste guia, percorremos um exemplo completo: criar e registrar trust anchor específico de tenant, gerar certificado de dispositivo, registrar seu subject DN, e usar o certificado para autenticar o dispositivo contra o adaptador MQTT do Hono. Conhecimento prático de criptografia RSA e conceitos X.509 (RFC 5280) é assumido.
Por que certificados cliente?
Usar senhas requer armazenar segredo por dispositivo no serviço Credentials do Hono, que é então comparado à senha fornecida pelo dispositivo. Certificados cliente eliminam a necessidade de segredos por dispositivo. Registrando um único trust anchor para um tenant, todos os certificados de dispositivo podem ser validados no handshake TLS usando a chave pública do tenant.
Criar uma autoridade certificadora do tenant
Gere o par de chaves RSA do tenant e certificado auto-assinado. Estes assinarão todos os certificados de dispositivo.
$ openssl genrsa -out tenant-key.pem 4096
$ openssl req -x509 -key tenant-key.pem -out tenant-cert.pem -days 365 -subj "/O=ACME Inc./CN=Sensors"
Use apenas atributos X.500 padrão (CN, L, ST, O, OU, C, STREET, DC, UID) para manter o DN simples.
Registrar o tenant
Registre o trust anchor com o Hono. O exemplo a seguir usa o Hono Sandbox (v0.9-M2 ou posterior). Substitua ACME por um tenant ID único para sua instância.
$ TENANT="ACME"
$ SUBJECT=$(openssl x509 -in tenant-cert.pem -noout -subject -nameopt RFC2253 | sed s/^subject=//)
$ PK=$(openssl x509 -in tenant-cert.pem -noout -pubkey | sed /^---/d | sed -z 's/\n//g')
$ cat < tenant.json
{
"tenant-id": "$TENANT",
"trusted-ca": {
"subject-dn": "$SUBJECT",
"public-key": "$PK"
}
}
EOS
$ curl -i -H "Content-Type: application/json" -H "Expect:" --data-binary @tenant.json https://hono.eclipse.org:28443/tenant
Criar certificado de dispositivo
Gere par de chaves do dispositivo e certificado assinado pela CA do tenant.
$ openssl genrsa -out device-key.pem 4096
$ openssl req -new -key device-key.pem -subj "\/O=ACME Inc.\/CN=Hot Fuzz Device" | \
openssl x509 -req -days 365 -out device-cert.pem -CA tenant-cert.pem -CAkey tenant-key.pem -CAcreateserial
Registrar o dispositivo
Registre um device ID com o tenant.
$ curl -i -H "Content-Type: application/json" --data-binary '{"device-id":"hot-fuzz"}' https://hono.eclipse.org:28443/registration/$TENANT
Registrar o subject DN do dispositivo
Associe o subject DN do certificado do dispositivo ao device ID.
$ SUBJECT=$(openssl x509 -in device-cert.pem -noout -subject -nameopt RFC2253 | sed s/^subject=//)
$ cat < credentials.json
{
"device-id": "hot-fuzz",
"type": "x509-cert",
"auth-id": "$SUBJECT",
"secrets": [{}]
}
EOS
$ curl -i -H "Content-Type: application/json" --data-binary @credentials.json https://hono.eclipse.org:28443/credentials/$TENANT
Testar a conexão
Inicie um consumer para o tenant e publique telemetria usando o certificado do dispositivo.
# Iniciar consumer
java -jar hono-cli-*-exec.jar \
--hono.client.host=hono.eclipse.org \
--hono.client.port=15671 \
--hono.client.tlsEnabled=true \
--hono.client.username=consumer@HONO \
--hono.client.password=verysecret \
--spring.profiles.active=receiver \
--tenant.id=$TENANT
# Publicar telemetria via MQTT
mosquitto_pub -h hono.eclipse.org -p 8883 \
--capath /etc/ssl/certs/ \
--cert device-cert.pem \
--key device-key.pem \
-q 1 -t telemetry -m "Hello there"
Se bem-sucedido, o console do consumer exibirá a mensagem. Você também pode publicar via HTTP:
curl -i --cert device-cert.pem --key device-key.pem \
-H "Content-Type: plain/text" -H "Expect:" \
--data-binary "Hello there" https://hono.eclipse.org:8443/telemetry
Tecnologia da Internet das Coisas
- Teoria de Dispositivos de Estado Sólido: Da Física às Aplicações Práticas
- Eclipse Hono Lança Registro de Dispositivos Baseado em MongoDB — Escalável, Pronto para Produção
- Eclipse Hono 1.0.0 Lança: Plataforma Unificada Open-Source de Conectividade IoT
- Soluções Confiáveis de Power-On para Dispositivos Médicos a Bateria
- Acompanhando Avanços em Tecnologia de Dispositivos Médicos
- Sistema de Controle de Temperatura Baseado em LM35 com Microcontrolador AT89S52
- Arm Aprimora Conectividade e Gestão de Dispositivos IoT com Aquisição da Stream Technologies
- Vulnerabilidades em Dispositivos IoT Expõem Casa Inteligente a Ataques: Ameaça de Comprometimento de Credenciais
- Dispositivos IoT Não Configurados: A Ameaça Oculta à Sua Casa Inteligente
- Hacking de Hardware Embarcado para Dispositivos IoT: Ferramentas, Técnicas e Implicações de Negócio