gpt4 book ai didi

java - 使用 TPM 连接到 Azure Iot Hub

转载 作者:行者123 更新时间:2023-12-01 18:47:52 26 4
gpt4 key购买 nike

我已按照此 sample 使用 TPM 身份验证在 Azure IoT 中成功配置设备。以及以下指南:https://learn.microsoft.com/en-us/azure/iot-dps/quick-enroll-device-tpm-java

现在我的设备已配置完毕,我正在尝试找出使用 TPM 芯片上存储的 key 连接到 IoT 中心的最简单方法。我尝试过以下代码片段:

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 中心?

最佳答案

我可以通过删除signWithIdentity中的检查来解决这个问题。函数并消除了传递 publicArea 的需要到 signData 函数。

publicArea 仅用于导出哈希算法,如果我们知道 key 是如何创建的,则可以将其设置为常量。

我更新的 signData 函数如下所示:

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

到目前为止,这对我们来说效果很好,但如果能从库作者那里得到一些反馈那就太好了:)

关于java - 使用 TPM 连接到 Azure Iot Hub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59793319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com