我在尝试使用指纹授权连接到 Azure IOT Hub 时收到详细错误“CONNECT failed: 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 服务器的日志可以为我提供更多关于它为什么认为设备未经授权的信息。他们在哪里?我是否要为他们查询中心或在门户中设置某些内容?我整个周末都在努力解决一个通用错误,虽然我学到了很多关于证书和集线器本身的知识,但我仍然得到错误。