View a markdown version of this page

Buat handler sertifikat khusus untuk penyimpanan aman - Integrasi terkelola untuk AWS IoT Device Management

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Buat handler sertifikat khusus untuk penyimpanan aman

Manajemen sertifikat perangkat sangat penting saat melakukan onboarding hub integrasi terkelola. Meskipun sertifikat disimpan dalam sistem file secara default, Anda dapat membuat penangan sertifikat khusus untuk keamanan yang ditingkatkan dan manajemen kredensi yang fleksibel.

Integrasi terkelola SDK perangkat akhir menyediakan penangan sertifikat untuk mengamankan antarmuka penyimpanan yang dapat Anda terapkan sebagai pustaka objek bersama (.so). Bangun implementasi penyimpanan aman Anda untuk membaca dan menulis sertifikat, lalu tautkan file pustaka ke HubOnboarding proses saat runtime.

Definisi dan komponen API

Tinjau secure_storage_cert_handler_interface.hpp file berikut untuk memahami komponen dan persyaratan API untuk implementasi Anda

Definisi API

Isi dari secure_storage_cert_hander_interface.hpp

/* * Copyright 2024 Amazon.com, Inc. or its affiliates. All rights reserved. * * AMAZON PROPRIETARY/CONFIDENTIAL * * You may not use this file except in compliance with the terms and * conditions set forth in the accompanying LICENSE.txt file. * * THESE MATERIALS ARE PROVIDED ON AN "AS IS" BASIS. AMAZON SPECIFICALLY * DISCLAIMS, WITH RESPECT TO THESE MATERIALS, ALL WARRANTIES, EXPRESS, * IMPLIED, OR STATUTORY, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. */ #ifndef SECURE_STORAGE_CERT_HANDLER_INTERFACE_HPP #define SECURE_STORAGE_CERT_HANDLER_INTERFACE_HPP #include <iostream> #include <memory> namespace IoTManagedIntegrationsDevice { namespace CertHandler { /** * @enum CERT_TYPE_T * @brief enumeration defining certificate types. */ typedef enum { CLAIM = 0, DHA = 1, PERMANENT = 2 } CERT_TYPE_T; class SecureStorageCertHandlerInterface { public: /** * @brief Read certificate and private key value of a particular certificate * type from secure storage. */ virtual bool read_cert_and_private_key(const CERT_TYPE_T cert_type, std::string &cert_value, std::string &private_key_value) = 0; /** * @brief Write permanent certificate and private key value to secure storage. */ virtual bool write_permanent_cert_and_private_key( std::string_view cert_value, std::string_view private_key_value) = 0; }; std::shared_ptr<SecureStorageCertHandlerInterface> createSecureStorageCertHandler(); } //namespace CertHandler } //namespace IoTManagedIntegrationsDevice #endif //SECURE_STORAGE_CERT_HANDLER_INTERFACE_HPP

Komponen kunci

  • CERT_TYPE_T - berbagai jenis sertifikat di hub.

    • KLAIM - sertifikat klaim yang awalnya ada di hub, akan ditukar dengan sertifikat permanen.

    • DHA - tidak digunakan untuk saat ini.

    • PERMANEN - sertifikat permanen untuk terhubung dengan titik akhir integrasi terkelola.

  • read_cert_and_private_key - (FUNGSI UNTUK DIIMPLEMENTASIKAN) Membaca sertifikat dan nilai kunci ke input referensi. Fungsi ini harus dapat membaca sertifikat KLAIM dan PERMANEN, dan dibedakan dengan jenis sertifikat yang disebutkan di atas.

  • write_permanent_cert_and_private_key - (FUNGSI UNTUK DIIMPLEMENTASIKAN) menulis sertifikat permanen dan nilai kunci ke lokasi yang diinginkan.

Contoh membangun

Pisahkan header implementasi internal Anda dari antarmuka publik (secure_storage_cert_handler_interface.hpp) untuk mempertahankan struktur proyek yang bersih. Dengan pemisahan ini, Anda dapat mengelola komponen publik dan pribadi sambil membangun penangan sertifikat Anda.

catatan

Menyatakan secure_storage_cert_handler_interface.hpp sebagai publik.

Struktur proyek

Struktur proyek penangan sertifikat integrasi terkelola.

Mewarisi antarmuka

Buat kelas konkret yang mewarisi antarmuka. Sembunyikan file header ini dan file lainnya di bawah direktori terpisah sehingga header pribadi dan publik dapat dibedakan dengan mudah saat membangun.

#ifndef IOTMANAGEDINTEGRATIONSDEVICE_SDK_STUB_SECURE_STORAGE_CERT_HANDLER_HPP #define IOTMANAGEDINTEGRATIONSDEVICE_SDK_STUB_SECURE_STORAGE_CERT_HANDLER_HPP #include "secure_storage_cert_handler_interface.hpp" namespace IoTManagedIntegrationsDevice::CertHandler { class StubSecureStorageCertHandler : public SecureStorageCertHandlerInterface { public: StubSecureStorageCertHandler() = default; bool read_cert_and_private_key(const CERT_TYPE_T cert_type, std::string &cert_value, std::string &private_key_value) override; bool write_permanent_cert_and_private_key( std::string_view cert_value, std::string_view private_key_value) override; /* * any other resource for function you might need */ }; } #endif //IOTMANAGEDINTEGRATIONSDEVICE_SDK_STUB_SECURE_STORAGE_CERT_HANDLER_HPP

Implementasi

Menerapkan kelas penyimpanan yang didefinisikan di atas,src/stub_secure_storage_cert_handler.cpp.

/* * Copyright 2024 Amazon.com, Inc. or its affiliates. All rights reserved. * * AMAZON PROPRIETARY/CONFIDENTIAL * * You may not use this file except in compliance with the terms and * conditions set forth in the accompanying LICENSE.txt file. * * THESE MATERIALS ARE PROVIDED ON AN "AS IS" BASIS. AMAZON SPECIFICALLY * DISCLAIMS, WITH RESPECT TO THESE MATERIALS, ALL WARRANTIES, EXPRESS, * IMPLIED, OR STATUTORY, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. */ #include "stub_secure_storage_cert_handler.hpp" using namespace IoTManagedIntegrationsDevice::CertHandler; bool StubSecureStorageCertHandler::write_permanent_cert_and_private_key( std::string_view cert_value, std::string_view private_key_value) { // TODO: implement write function return true; } bool StubSecureStorageCertHandler::read_cert_and_private_key(const CERT_TYPE_T cert_type, std::string &cert_value, std::string &private_key_value) { std::cout<<"Using Stub Secure Storage Cert Handler, returning dummy values"; cert_value = "StubCertVal"; private_key_value = "StubKeyVal"; // TODO: implement read function return true; }

Menerapkan fungsi pabrik yang didefinisikan dalam antarmuka,src/secure_storage_cert_handler.cpp.

#include "stub_secure_storage_cert_handler.hpp" std::shared_ptr<IoTManagedIntegrationsDevice::CertHandler::SecureStorageCertHandlerInterface> IoTManagedIntegrationsDevice::CertHandler::createSecureStorageCertHandler() { // TODO: replace with your implementation return std::make_shared<IoTManagedIntegrationsDevice::CertHandler::StubSecureStorageCertHandler>(); }

CMakeList.txt

#project name must stay the same project(SecureStorageCertHandler) # Public Header files. The interface definition must be in top level with exactly the same name #ie. Not in anotherDir/secure_storage_cert_hander_interface.hpp set(PUBLIC_HEADERS ${PROJECT_SOURCE_DIR}/include ) # private implementation headers. set(PRIVATE_HEADERS ${PROJECT_SOURCE_DIR}/internal/stub ) #set all sources set(SOURCES ${PROJECT_SOURCE_DIR}/src/secure_storage_cert_handler.cpp ${PROJECT_SOURCE_DIR}/src/stub_secure_storage_cert_handler.cpp ) # Create the shared library add_library(${PROJECT_NAME} SHARED ${SOURCES}) target_include_directories( ${PROJECT_NAME} PUBLIC ${PUBLIC_HEADERS} PRIVATE ${PRIVATE_HEADERS} ) # Set the library output location. Location can be customized but version must stay the same set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib VERSION 1.0 SOVERSION 1 ) # Install rules install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION lib ARCHIVE DESTINATION lib ) install(FILES ${HEADERS} DESTINATION include/SecureStorageCertHandler )

Penggunaan

Setelah kompilasi, Anda akan memiliki file pustaka objek libSecureStorageCertHandler.so bersama dan tautan simbolik yang terkait. Salin file pustaka dan tautan simbolik ke lokasi perpustakaan yang diharapkan oleh biner. HubOnboarding

Pertimbangan utama

  • Verifikasi bahwa akun pengguna Anda telah membaca dan menulis izin untuk HubOnboarding biner dan libSecureStorageCertHandler.so pustaka.

  • Simpan secure_storage_cert_handler_interface.hpp sebagai satu-satunya file header publik Anda. Semua file header lainnya harus tetap dalam implementasi pribadi Anda.

  • Verifikasi nama pustaka objek bersama Anda. Saat Anda membangunlibSecureStorageCertHandler.so, HubOnboarding mungkin memerlukan versi tertentu dalam nama file, seperti. libSecureStorageCertHandler.so.1.0 Gunakan ldd perintah untuk memeriksa dependensi perpustakaan dan membuat tautan simbolik sesuai kebutuhan.

  • Jika implementasi pustaka bersama Anda memiliki dependensi eksternal, simpan di direktori yang HubOnboarding dapat diakses, seperti /usr/lib or the iotmi_common direktori.

Gunakan penyimpanan yang aman

Perbarui iotmi_config.json file Anda dengan mengatur keduanya iot_claim_cert_path dan iot_claim_pk_path keSECURE_STORAGE.

{ "ro": { "iot_provisioning_method": "FLEET_PROVISIONING", "iot_claim_cert_path": "SECURE_STORAGE", "iot_claim_pk_path": "SECURE_STORAGE", "fp_template_name": "device-integration-example", "iot_endpoint_url": "[ACCOUNT-PREFIX]-ats.iot.AWS-REGION.amazonaws.com", "SN": "1234567890", "UPC": "1234567890" }, "rw": { "iot_provisioning_state": "NOT_PROVISIONED" } }