Подключение к Azure Iot Hub с помощью TPM - PullRequest
0 голосов
/ 17 января 2020

Я успешно подготовил устройство в Azure IoT, используя аутентификацию TPM, следуя этому образцу и следующему руководству: https://docs.microsoft.com/en-us/azure/iot-dps/quick-enroll-device-tpm-java

Теперь, когда мой устройство настроено. Я пытаюсь найти самый простой способ подключения к IoT Hub с помощью ключей, хранящихся в микросхеме TPM. Я попробовал следующий фрагмент кода:

SecurityProviderTpm securityClientTPM = new SecurityProviderTPMHsm();
DeviceClient client  = DeviceClient.createFromSecurityProvider("myhub.azure-devices.net", "my-device", securityClientTPM, IotHubClientProtocol.HTTPS);

, но это не с:

Exception in thread "main" java.io.IOException: com.microsoft.azure.sdk.iot.provisioning.security.exceptions.SecurityProviderException: activateIdentityKey first before signing
        at com.microsoft.azure.sdk.iot.device.auth.IotHubSasTokenHardwareAuthenticationProvider.generateSasTokenSignatureFromSecurityProvider(IotHubSasTokenHardwareAuthenticationProvider.java:169)
        at com.microsoft.azure.sdk.iot.device.auth.IotHubSasTokenHardwareAuthenticationProvider.<init>(IotHubSasTokenHardwareAuthenticationProvider.java:51)
        at com.microsoft.azure.sdk.iot.device.DeviceClientConfig.<init>(DeviceClientConfig.java:192)
        at com.microsoft.azure.sdk.iot.device.InternalClient.<init>(InternalClient.java:109)
        at com.microsoft.azure.sdk.iot.device.DeviceClient.<init>(DeviceClient.java:284)
        at com.microsoft.azure.sdk.iot.device.DeviceClient.createFromSecurityProvider(DeviceClient.java:250)
        at samples.com.microsoft.azure.sdk.iot.SendEvent.main(SendEvent.java:88)
Caused by: com.microsoft.azure.sdk.iot.provisioning.security.exceptions.SecurityProviderException: activateIdentityKey first before signing
        at com.microsoft.azure.sdk.iot.provisioning.security.hsm.SecurityProviderTPMHsm.signWithIdentity(SecurityProviderTPMHsm.java:371)
        at com.microsoft.azure.sdk.iot.device.auth.IotHubSasTokenHardwareAuthenticationProvider.generateSasTokenSignatureFromSecurityProvider(IotHubSasTokenHardwareAuthenticationProvider.java:155)
        ... 6 more

Поиск кода SDK показывает, что activateIdentityKey вызывается только во время процесса инициализации.

Повторный вызов процедуры инициализации каждый раз, когда я хочу подключиться к клиенту, кажется неправильным. Есть ли лучший способ подключения устройства к концентратору IoT после его подготовки?

1 Ответ

0 голосов
/ 25 февраля 2020

Мне удалось обойти эту проблему, сняв флажок в функции signWithIdentity и избавив от необходимости передавать publicArea в функцию signData.

publicArea используется только для получения алгоритма ha sh, который может быть установлен на постоянную, если мы знаем, как был создан ключ.

Моя обновленная функция signData выглядит следующим образом:

private byte[] signData(Tpm tpm, byte[] tokenData) throws SecurityProviderException {
    TPM_ALG_ID  idKeyHashAlg = TPM_ALG_ID.SHA256;
    ...

Пока что это хорошо работает для нас, но было бы неплохо получить отзывы от авторов библиотеки:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...