Как правильно зарегистрировать устройство в Azure IoT Hub Device Provisioning Service на iOS - PullRequest
1 голос
/ 27 мая 2020

В настоящее время я пытаюсь понять, как взаимодействовать со службой подготовки устройств (DPS) в центре Интернета вещей Azure из iOS. Я использую REST API (который, кажется, очень плохо документирован) из-за того, что Azure IoT CocoaPods не включает функциональность DPS.

Наше приложение требует, чтобы устройство регистрировалось с использованием самоподписанный сертификат X509. Для этого я создаю CSR, а затем отправляю его на сервер подписи сертификатов и получаю самозаверяющий сертификат, который можно использовать с Azure.

Я конвертирую сертификат в ' Данные DER 'и импорт их в Связку ключей. Закрытый ключ уже существует в цепочке для ключей с момента создания CSR.

Когда я делаю запрос к API устройства регистрации DPS, я получаю две проблемы аутентификации; проверка доверия сервера (NSURLAuthenticationMethodServerTrust) и проверка сертификата клиента (NSURLAuthenticationMethodClientCertificate)

Здесь у меня возникают проблемы. Я не уверен, как правильно действовать здесь. Я создаю URLCredential для второй задачи следующим образом:

let identityQuery: [String: Any] = [
    String(kSecClass): kSecClassIdentity,
    String(kSecReturnRef): kCFBooleanTrue,
    String(kSecAttrLabel): certificateName(forDevice: device)
]

var rawIdentity: AnyObject?
let identitySuccess = SecItemCopyMatching(identityQuery as CFDictionary, &rawIdentity)
if identitySuccess == errSecSuccess {
    let identity = rawIdentity as! SecIdentity

    var certificate: SecCertificate?
    SecIdentityCopyCertificate(identity, &certificate)

    return URLCredential(identity: identity, certificates: [certificate], persistence: .forSession)
}

Это извлекает и сертификат, и личность, но когда я отвечаю на запрос, я получаю ошибку SSL:

Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to
the server cannot be made." UserInfo={_kCFStreamErrorCodeKey=-9816, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?,
NSUnderlyingError=0x6000022b8240 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" 
UserInfo={_kCFStreamPropertySSLClientCertificateState=0, 
_kCFNetworkCFStreamSSLErrorOriginalValue=-9816, _kCFStreamErrorDomainKey=3, 
_kCFStreamErrorCodeKey=-9816}}, NSLocalizedDescription=An SSL error has occurred and a secure 
connection to the server cannot be made., NSErrorFailingURLKey=https://global.azure-devices-provisioning.net/[scope_id]/registrations/[device-uuid]/register?api-version=2019-03-31, 
NSErrorFailingURLStringKey=https://global.azure-devices-provisioning.net/[scope_id]/registrations/[device-uuid]/register?api-version=2019-03-31, 
_kCFStreamErrorDomainKey=3}

Если у кого-нибудь есть опыт работы с этим на iOS, любая помощь будет принята с благодарностью.

...