拇印認証を使用して Azure IOT Hub に接続しようとすると、「接続に失敗しました: RefusedNotAuthorized」という詳細なエラーが表示されます。対称キー認証を使用してデバイスを作成すると、問題なく接続できます。私は週末を通してさまざまなグーグル検索に苦労しており、デバッグを進める方法について途方に暮れています。
次のコードを使用して、Azure IOT Hub にデバイスを正常に登録しています。
...
var certificate = certificateHelper.CreateSelfSignedCertificate(userRequest.DeviceID.ToString());
// connect to iot hub
var registryManager = RegistryManager.CreateFromConnectionString("[My Connection String]");
// define device
Device iotDevice = new Device(userRequest.DeviceID.ToString());
iotDevice.Authentication = new AuthenticationMechanism()
{
Type = AuthenticationType.SelfSigned,
X509Thumbprint = new X509Thumbprint()
{
PrimaryThumbprint = certificate.Thumbprint,
SecondaryThumbprint = certificate.Thumbprint
}
};
// register
try
{
iotDevice = await registryManager.AddDeviceAsync(iotDevice);
}
catch (DeviceAlreadyExistsException)
{
...
次のコードで自己署名証明書を作成しています。
public X509Certificate2 CreateSelfSignedCertificate(string subjectName)
{
var ecdsa = ECDsa.Create(); // generate asymmetric key pair
var req = new CertificateRequest("CN=" + subjectName, ecdsa, HashAlgorithmName.SHA256);
return req.CreateSelfSigned(DateTimeOffset.Now, DateTimeOffset.Now.AddYears(1));
}
最後に、次のコードから IOT ハブに接続しようとしています。
X509Certificate2 cert = new X509Certificate2(Convert.FromBase64String(device.Certificate));
var deviceAuthentication = new DeviceAuthenticationWithX509Certificate(device.TestDeviceID.ToString(), cert);
IotHub = DeviceClient.Create(_hostname, deviceAuthentication, TransportType.Mqtt);
IotHub.OpenAsync().Wait();
正しくない単純なものがあれば、ぜひ知りたいです。しかし、私が本当に興味を持っているのは、これをどのようにデバッグできるかです。IOT サーバーのログがあり、デバイスが無許可であると見なされる理由について詳細な情報が得られると思います。彼らはどこにいる?それらについてハブにクエリを実行するか、ポータルで何かを設定しますか? 週末中、一般的なエラーに頭を悩ませていました。証明書とハブ自体について多くのことを学びましたが、それでもエラーが発生します。