Linux容器通过X509证书连接Azure DPS失败求助
Linux容器中X509证书连接Azure DPS失败(错误401002)
按照官方教程操作,无法让Linux容器通过X509证书连接Azure DPS。该代码在Windows 10环境下使用dotnet run命令(C#6和C#8版本)均可正常运行,执行日志如下:
C:\Projects\Azure\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample>dotnet run -- -s 0ne00AF30D0 -c device-01-full-chain.cert.pfx -p 1234 Loading the certificate... device-01-full-chain.cert.pfx Found certificate: 84B46F5118AE660329B58BB4D05FXXXXXXXXXXXX CN=Azure IoT Hub CA Cert Test Only; PrivateKey: False Found certificate: AED34CED0E79056EF6632DD1720BXXXXXXXXXXXX CN=Azure IoT Hub Intermediate Cert Test Only; PrivateKey: False Found certificate: 95D072F7DF549D3A2A49186B6300XXXXXXXXXXXX CN=device-01; PrivateKey: True Using certificate 95D072F7DF549D3A2A49186B6300XXXXXXXXXXXX CN=device-01 Initializing the device provisioning client... Initialized for registration Id device-01. Registering with the device provisioning service... Registration status: Assigned. Device device-01 registered to .azure-devices.net. Creating X509 authentication for IoT Hub... Testing the provisioned device with IoT Hub... Sending a telemetry message... Finished.
但在Linux容器中运行时出现错误,日志如下:
C:\Projects\Azure\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample>docker run -it --rm x509sample Loading the certificate... certificate.pfx Found certificate: 84B46F5118AE660329B58BB4D05FXXXXXXXXXXXX CN=Azure IoT Hub CA Cert Test Only; PrivateKey: False Found certificate: AED34CED0E79056EF6632DD1720BXXXXXXXXXXXX CN=Azure IoT Hub Intermediate Cert Test Only; PrivateKey: False Found certificate: 95D072F7DF549D3A2A49186B6300XXXXXXXXXXXX CN=device-01; PrivateKey: True Using certificate 95D072F7DF549D3A2A49186B6300XXXXXXXXXXXX CN=device-01 Initializing the device provisioning client... Initialized for registration Id device-01. Registering with the device provisioning service... Unhandled exception. Microsoft.Azure.Devices.Provisioning.Client.ProvisioningTransportException: {"errorCode":401002,"trackingId":"d95fd59b-d1b0-45e1-a7ef-16d94488075b","message":"CA certificate not found.","timestampUtc":"2023-11-08T00:26:15.7151494Z"} at Microsoft.Azure.Devices.Provisioning.Client.Transport.ProvisioningTransportHandlerMqtt.ProvisionOverTcpCommonAsync(ProvisioningTransportRegisterMessage message, ClientTlsSettings tlsSettings, CancellationToken cancellationToken) at Microsoft.Azure.Devices.Provisioning.Client.Transport.ProvisioningTransportHandlerMqtt.RegisterAsync(ProvisioningTransportRegisterMessage message, CancellationToken cancellationToken) at Microsoft.Azure.Devices.Provisioning.Client.Samples.ProvisioningDeviceClientSample.RunSampleAsync() in /App/ProvisioningDeviceClientSample.cs:line 46 at Microsoft.Azure.Devices.Provisioning.Client.Samples.Program.Main(String[] args) in /App/Program.cs:line 30 at Microsoft.Azure.Devices.Provisioning.Client.Samples.Program.<Main>(String[] args)
异常抛出位置为:
DeviceRegistrationResult result = await provClient.RegisterAsync();
怀疑问题与Linux容器中未安装根证书和中间证书有关,已参考相关文档和GitHub讨论,但仍需进一步帮助。当前使用的Dockerfile如下:
FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine3.18 as build-env WORKDIR /App COPY *.csproj . # Restore as distinct layers RUN dotnet restore # copy and publish app and libraries COPY . . # Build and publish a release RUN dotnet publish -c Release -o out FROM mcr.microsoft.com/dotnet/runtime:8.0-alpine3.18 COPY /device-01-full-chain.cert.pfx certificate.pfx WORKDIR /App COPY --from=build-env /App/out . ENTRYPOINT ["./X509Sample"]
内容的提问来源于stack exchange,提问作者MikeF
相关产品推荐
相关产品推荐

