산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial Internet of Things >> 사물 인터넷 기술

이클립스 Hono에서 X.509 인증서로 안전한 디바이스 인증 구현하기

최근 몇 달간 기본 보안 표준을 충족하지 못하는 불안전한 IoT 디바이스에 대한 언론 보도가 강조되었습니다. 반복되는 우려는 디바이스에서 클라우드 서비스로 전송되는 데이터의 기밀성입니다. 놀랍게도 많은 디바이스가 HTTP와 MQTT 같은 TCP/IP 기반 프로토콜이 TLS 암호화를 지원함에도 불구하고 공개 네트워크를 통해 암호화 없이 데이터를 전송합니다.

이클립스 Hono는 처음부터 HTTP와 MQTT 어댑터에 TLS를 활성화했습니다. 0.9-M2 마일스톤은 이제 TLS 핸드셰이크 중 X.509 클라이언트 인증서 인증 지원을 추가해, 디바이스가 사용자명/비밀번호 대신 키 쌍을 사용할 수 있게 했습니다.

모든 개발자 여러분께

유럽 최대 IoT 해커톤이 2023년 5월 14-15일 베를린에서 돌아옵니다. 700명 이상 개발자와 도메인별 과제에 참여하고, 배우고, 네트워킹하고, 즐기세요.

이 가이드에서는 완전한 예제를 안내합니다: 테넌트별 신뢰 앵커 생성 및 등록, 디바이스 인증서 생성, 주체 DN 등록, 인증서를 사용해 Hono의 MQTT 어댑터에 디바이스 인증. RSA 암호학과 X.509 개념(RFC 5280)에 대한 실무 지식 있다고 가정합니다.

왜 클라이언트 인증서인가?

비밀번호 사용은 Hono의 자격증명 서비스에 디바이스별 비밀을 저장하고 디바이스가 제공한 비밀번호와 비교해야 합니다. 클라이언트 인증서는 디바이스별 비밀 필요성을 없앱니다. 테넌트 단일 신뢰 앵커 등록으로, 테넌트 공개 키를 사용해 TLS 핸드셰이크에서 모든 디바이스 인증서를 검증할 수 있습니다.

테넌트 인증 기관 생성

테넌트 RSA 키 쌍과 자기 서명 인증서 생성. 이들이 모든 디바이스 인증서에 서명합니다.

$ 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"

DN을 단순하게 유지하기 위해 표준 X.500 속성(CN, L, ST, O, OU, C, STREET, DC, UID)만 사용하세요.

테넌트 등록

신뢰 앵커를 Hono에 등록. 다음 예제는 Hono 샌드박스(v0.9-M2 이상) 사용. ACME를 인스턴스용 고유 테넌트 ID로 교체하세요.

$ 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

디바이스 인증서 생성

디바이스 키 쌍과 테넌트 CA로 서명된 인증서 생성.

$ 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

디바이스 등록

테넌트에 디바이스 ID 등록.

$ curl -i -H "Content-Type: application/json" --data-binary '{"device-id":"hot-fuzz"}' https://hono.eclipse.org:28443/registration/$TENANT

디바이스 주체 DN 등록

디바이스 인증서의 주체 DN을 디바이스 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

연결 테스트

테넌트용 컨슈머 시작하고 디바이스 인증서로 텔레메트리 발행.

# 컨슈머 시작
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

# 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"

성공하면 컨슈머 콘솔에 메시지 표시. 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

사물 인터넷 기술

  1. 고체 소자 이론: 물리학에서 실용적 응용까지
  2. 이클립스 호노, 몽고DB 기반 디바이스 레지스트리 출시—확장 가능, 프로덕션 준비
  3. 이클립스 호노 1.0.0 출시: 통합 오픈소스 IoT 연결 플랫폼
  4. 배터리 구동 의료 기기를 위한 신뢰할 수 있는 파워온 솔루션
  5. 의료 기기 기술 발전 추적: 센서부터 보안까지
  6. AT89S52 마이크로컨트롤러와 LM35 센서를 이용한 온도 기반 기기 제어 시스템
  7. 암(Arm), 스트림 테크놀로지스 인수로 IoT 연결성·디바이스 관리 강화
  8. IoT 기기 취약점, 스마트홈 공격 노출: 자격증명 탈취 위협
  9. 미구성 IoT 기기: 스마트홈 위협하는 숨은 위험
  10. IoT 디바이스 임베디드 하드웨어 해킹: 도구, 기술, 비즈니스 시사점