"SetCertificatePath" C# 物联网设备客户端中的选项

"SetCertificatePath" Option in C# iot device client

Java Azure Iot Device Client 具有“SetCertificatePath”选项以在 java 代码中添加根 ca 证书,以便具有对称密钥证明的设备可以验证网关设备.

import com.microsoft.azure.sdk.iot.device.DeviceClient;
...

client = new DeviceClient("HostName=xxx-dev-westeurope.azure-devices.net;DeviceId=demo-source-1;SharedAccessKey=xxx;GatewayHostName=demo-edge.dev.example.com",IotHubClientProtocol.MQTT);          
client.setOption("SetCertificatePath", "C:\certs\device_ca_aliasazxVrrdEVxd7kvKvne1pOEyuSHF8EXSowNDhMzl30jI_.cert.pem");
client.open();

C# 设备客户端中是否有类似的选项,例如 client.setOption("SetCertificatePath",...)

using Microsoft.Azure.Devices.Client;
...

var deviceClient = DeviceClient.CreateFromConnectionString("HostName=xxx-dev-westeurope.azure-devices.net;DeviceId=demo-source-1;SharedAccessKey=xxx;GatewayHostName=demo-edge.dev.example.com", TransportType.Mqtt);
await deviceClient.OpenAsync();

使用此代码,我得到一个无效的证书错误:

AuthenticationException: TLS authentication error.
AggregateException: One or more errors occurred. (The remote certificate is invalid according to the validation procedure.)

C# Azure Iot Device Client是否有类似的选项?

不完全是,我相信。据我所知,C# SDK 依赖于 Windows 或 Linux 证书存储中的证书。 this doc 中也提到了它。

a sample 向应用程序提供了证书的路径,然后应用程序打开证书存储并将证书保存到其中。我希望这足以满足您的需求!

C# 客户端从本地系统的受信任的根证书颁发机构存储中获取 CA 证书。

务必使用根证书,例如:edge_owner_azxVrrdEVxd7kvKvne1pOEyuSHF8EXSowNDhMzl30jI_.cert.pem

您可能还需要将 .pem 文件转换为 .crt 文件才能将其添加到您的本地商店。

openssl x509 -outform der -in .\edge_owner_azxVrrdEVxd7kvKvne1pOEyuSHF8EXSowNDhMzl30jI_.cert.pem -out .\edge_owner_azxVrrdEVxd7kvKvne1pOEyuSHF8EXSowNDhMzl30jI_.cert.crt

链接: