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

Eclipse Hono의 X.509 기반 장치 인증

지난 몇 달 동안 미디어는 불안정한 가장 기본적인 보안 요구 사항도 충족하지 못한 IoT 장치. 제기된 우려 중 하나는 장치에서 제조업체가 제공하는 클라우드 서비스로 전송되는 데이터의 기밀성이었습니다. 많은 경우에 데이터는 완전히 암호화되지 않은 상태로 공용 네트워크를 통해 전송되는데, 이는 오늘날 IoT 장치(예:HTTP 및 MQTT)에서 사용되는 모든 인기 있는 TCP/IP 기반 전송 프로토콜이 전송 계층 보안을 통한 보안(암호화) 전송 채널 (TLS).

Eclipse Hono는 처음부터 HTTP 및 MQTT 프로토콜 어댑터에서 TLS 사용을 지원했습니다. 최근에 릴리스된 0.9-M2 마일스톤에는 HTTP 및 MQTT 어댑터 모두에 대한 TLS 핸드셰이크의 일부로 X.509 클라이언트 인증서를 사용하는 장치 인증에 대한 지원이 추가되었습니다. 이를 통해 장치는 프로토콜 어댑터에 대해 자신을 인증하기 위해 사용자 이름과 암호 대신 개인/공개 키 쌍을 사용할 수 있습니다.

모든 개발자 호출

유럽 ​​최대의 IoT 해커톤이 2019년 5월 14-15일에 베를린에서 열립니다. 700명 이상의 개발자와 함께 다양한 도메인별 해킹 챌린지에 참여하여 전 세계에서 온 해킹, 플레이, 학습, 재미, 새로운 친구를 사귈 수 있습니다!

IoT 해커톤에 참여하세요

이 블로그 게시물에서는 테넌트별 트러스트 앵커를 만들고 등록하는 방법에 대한 전체 예를 보여 드리겠습니다. , 장치에 대한 인증서 생성, 주체 고유 이름 등록 마지막으로 인증서를 사용하여 Hono의 MQTT 프로토콜 어댑터에 대해 장치를 인증합니다. 이 게시물의 나머지 부분에서는 RSA 기반 암호화, 특히 개인 키와 공개 키가 수행하는 역할에 대한 일반적인 이해가 있다고 가정합니다. 참고로 RFC 5280은 X.509의 모든 기술적 세부사항을 정의합니다.

클라이언트 인증서가 필요한 이유

기기 인증에 비밀번호를 사용할 때 각 기기의 비밀번호를 Hono의 Credentials 서비스에 등록해야 프로토콜 어댑터가 인증 중에 기기가 제시한 비밀번호를 기록된 비밀번호의 해시와 비교할 수 있습니다.

장치 인증을 위해 클라이언트 인증서를 사용하는 장점 중 하나는 Hono에 장치에 대한 개별 비밀(비밀번호)을 더 이상 등록할 필요가 없다는 것입니다. 대신 단일 트러스트 앵커를 등록하는 것으로 충분합니다. 테넌트의 경우 TLS 핸드셰이크의 일부로 테넌트에 속한 모든 장치의 ID를 확인하는 데 사용할 수 있습니다. 이것이 작동하려면 장치에서 사용하는 클라이언트 인증서에 테넌트의 트러스트 앵커 역할을 하는 공개 키를 사용하여 유효성을 검사할 수 있는 디지털 서명이 포함되어 있어야 합니다.

테넌트 인증 기관 만들기

따라서 첫 번째 단계는 테넌트의 장치에서 사용하는 클라이언트 인증서에 서명하는 데 사용할 테넌트의 공개/개인 키 쌍을 만드는 것입니다.

$ openssl genrsa -out 테넌트 키.pem 4096 $ openssl req -x509 -key tenant-key.pem -out tenant-cert.pem -days 365 -subj "/O=ACME Inc./CN=Sensors"

'-subj' 매개변수를 사용하여 설정된 주체 고유 이름에는 유효한 X.500 고유 이름이 포함될 수 있습니다. 그러나 일을 단순하게 유지하려면 `CN`, `L`, `ST`, `O`, `OU`, `C`, `STREET`, `DC`, `UID`.

세입자 등록

이제 키가 생성되었으므로 공개 키를 트러스트 앵커로 사용하여 테넌트를 등록할 수 있습니다.

편의상 Hono Sandbox를 사용합니다. 그러나 버전 0.9-M2 이상을 실행하는 다른 (로컬) 설치도 작동해야 합니다.

아래 명령어에서 'ACME' 테넌트 식별자를 원하는 식별자로 교체하세요. 이것은 Hono가 테넌트 식별자의 고유성을 적용하기 때문에 중요합니다. 따라서 각 식별자는 Hono 인스턴스당 한 번만 등록할 수 있습니다.

처음 세 명령은 나중에 사용하기 위해 몇 가지 변수를 정의합니다. 테넌트 식별자, 인증서의 주체 고유 이름 및 Base64로 인코딩된 공개 키입니다. 그런 다음 명령에서 변수를 사용하여 새 테넌트에 트러스트 앵커를 등록합니다.

$ 테넌트="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') $ 고양이 < 테넌트.json {"tenant-id":"$TENANT", "trusted-ca":{"subject-dn":"$SUBJECT", "공개 키":"$PK"}} EOS $ curl -i -H '콘텐츠 유형:애플리케이션/json' -H '예상:' --data-binary @tenant.json https://hono.eclipse.org:28443/tenant

기기 인증서 만들기

다음 단계는 테넌트의 개인 키로 서명된 장치 및 해당 클라이언트 인증서에 대한 키 쌍을 만드는 것입니다.

$ openssl genrsa -out device-key.pem 4096 $ openssl req -new -key device-key.pem -subj "/O=ACME Inc./CN=핫 퍼즈 장치" | openssl x509 -req -days 365 -out device-cert.pem -CA tenant-cert.pem -CAkey tenant-key.pem -CAcreateserial

다시 말하지만, 제목에 `CN`, `L`, `ST`, `O`, `OU`, `C`, `STREET`, `DC`, `UID` 이외의 속성 유형을 사용하지 마십시오. 고유 이름.

기기 등록

이제 임의의 장치 식별자를 사용하여 장치를 테넌트에 등록할 수 있습니다.

$ curl -i -H '콘텐츠 유형:애플리케이션/json' --data-binary '{"device-id":"hot-fuzz"}' https://hono.eclipse.org:28443/registration/$ 임차인

기기의 제목 DN 등록

마지막 단계는 장치의 주체 고유 이름을 등록하는 것입니다. 다시 말하지만, 위와 동일한 테넌트 및 장치 식별자를 사용해야 합니다.

$ SUBJECT=$(openssl x509 -in device-cert.pem -noout -subject -nameopt RFC2253 | sed s/^subject=//) $ 고양이 < 자격 증명.json {"device-id":"hot-fuzz", "type":"x509-cert", "auth-id":"$SUBJECT", "비밀":[{}]} EOS $ curl -i -H '콘텐츠 유형:애플리케이션/json' --data-binary @credentials.json https://hono.eclipse.org:28443/credentials/$TENANT

연결 테스트

이제 장치가 등록되었으므로 새로 생성된 클라이언트 인증서를 사용하여 MQTT 어댑터에 연결하고 일부 데이터를 게시할 차례입니다.

먼저 장치를 등록한 테넌트에 대한 소비자를 시작합니다. Hono 웹사이트에서 클라이언트를 다운로드할 수 있습니다.

$ java -jar hono-cli-*-exec.jar --hono.client.host=hono.eclipse.org --hono.client.port=15671 --hono.client.tlsEnabled=true --hono.client. 사용자 이름=consumer@HONO --hono.client.password=verysecret --spring.profiles.active=receiver --tenant.id=$TENANT

마지막 단계에서는 Eclipse Mosquitto 명령줄 클라이언트를 사용하여 일부 원격 측정 데이터를 게시합니다.

$ mosquitto_pub -h hono.eclipse.org -p 8883 --capath /etc/ssl/certs/ --cert device-cert.pem --key device-key.pem -q 1 -t 원격 측정 -m "안녕하세요"

모든 것이 잘 되면 소비자를 시작한 터미널의 콘솔에 데이터가 기록되는 것을 볼 수 있을 것입니다.

기기는 HTTP를 사용하여 데이터를 게시할 수도 있습니다.

$ curl -i --cert device-cert.pem --key device-key.pem -H '콘텐츠 유형:일반/텍스트' -H '예상:' --data-binary '안녕하세요' https:// hono.eclipse.org:8443/telemetry

사물 인터넷 기술

  1. 고체 소자 이론 소개
  2. Eclipse Hono의 새로운 MongoDB 기반 장치 레지스트리 릴리스
  3. Eclipse Hono 1.0.0 출시:개방형 IoT 연결 플랫폼
  4. 배터리로 작동되는 의료 기기의 안정적인 전원 켜기
  5. 의료 기기 발전 모니터링
  6. LM35를 사용한 온도 기반 장치 제어 시스템
  7. Arm, Stream Technologies 인수로 IoT 연결 및 장치 관리 기능 확장
  8. 애플리케이션 취약점으로 인해 IoT 장치가 공격에 노출될 수 있습니다.
  9. 적절하고 잊어버리기:구성되지 않은 IoT로 인한 위협
  10. IoT 기기 임베디드 하드웨어 해킹 소개