Connect to Azure DPS group enrollment x509cert Linux

80 Views Asked by At

Using this tutorial I am not able to connect a Linux container to Azure DPS using a X509 cert.

The code works using dotnet run in Windows 10, bot in C#6 and 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.

Here are the logs:

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)

The exception is being thrown in DeviceRegistrationResult result = await provClient.RegisterAsync();

I think it's related to not installing the root and intermediate certs in the windows certificate store.
There is also a comment in github and a gist related to the subject, but I need a little more help.

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"]
0

There are 0 best solutions below