Жизненный цикл и продление сертификата

Срок действия пар "ключ-сертификат" клиента и сертификатов ЦС истекает регулярно. Ваша сетевая инфраструктура и устройства должны иметь возможность обрабатывать срок действия сертификата и представлять новый сертификат без потери подключения. Для корневых сертификатов ЦС, используемых в проверке подлинности сервера RADIUS, и сертификатов клиентов, используемых при проверке подлинности устройства, требуются различные подходы к обновлению.

Осторожностью

Так как идентификаторы сертификатов являются общесистемными, команда az sphere или вызов функции, добавляющий новый сертификат, может перезаписать сертификат, добавленный ранее командой или вызовом функции, что может привести к сбоям сетевого подключения. Настоятельно рекомендуется разработать четкие процедуры обновления сертификатов и тщательно выбирать идентификаторы сертификатов.

Дополнительные сведения о том, как Azure Sphere использует идентификаторы сертификатов, см. в разделе Идентификаторы сертификатов.

Обновление сертификата корневого ЦС

Сертификат ЦС — это корневой ЦС сертификата проверки подлинности на сервере RADIUS. Если срок действия сертификата ЦС истек или PKI для сервера изменится( например, если сервер получает новый корневой ЦС из другого центра сертификации), устройства Azure Sphere больше не смогут проходить проверку подлинности сервера проверки подлинности RADIUS. Однако устройства должны продолжать работу.

В типичной беспроводной сети невозможно выполнить переключение "ножа-края"; То есть вы не можете обновить все устройства Azure Sphere в тот же момент, когда корневой ЦС станет недействительным. Устройства могут находиться в автономном режиме в критический момент или точность хронометрирования может отличаться в разных установках. Приложение высокого уровня должно иметь возможность получить новый сертификат корневого ЦС до истечения срока действия текущего сертификата или изменения, чтобы новый сертификат был готов к использованию при необходимости.

Рекомендуется создать и включить вторую сеть, которая имеет ту же конфигурацию, что и существующая сеть, но использующая новый сертификат корневого ЦС. При сбое существующего сертификата корневого ЦС в исходной сети ОС автоматически попытается подключиться ко второй сети. Затем приложение может заменить сертификат в исходной сети новым корневым ЦС и удалить вторую сеть. Затем устройство может подключиться с помощью исходной сети, в которой теперь есть новый корневой ЦС. На следующем рисунке представлен этот подход.

Поток приложения для обновления сертификата корневого ЦС

Высокоуровневое приложение должно выполнить следующие действия, чтобы легко обрабатывать обновление сертификата корневого ЦС:

  1. В рамках обычной работы приложение настраивает Network1 типа WifiConfig_Security_Wpa2_EAP_TLS. Эта сеть связана с сертификатом клиента для устройства и корневым ЦС1, который является исходным корневым ЦС для сервера RADIUS.

  2. Примерно за 90 дней до истечения срока действия RootCA устройство получает уведомление из облака на устройство о том, что в ближайшее время потребуется новый сертификат корневого ЦС для сервера RADIUS. Уведомление может быть активировано администратором сети или другим оператором. возможные механизмы уведомлений включают сообщение Центр Интернета вещей Azure или Azure IoT Central из облака на устройство.

    Администратор сети отвечает за обновление сертификата на сервере RADIUS и обеспечение соответствующего обновления устройств Azure Sphere.

  3. Приложение получает новый корневой ЦС и вызывает CertStore_InstallRootCACertificate , чтобы сохранить его как корневой ЦС2.

  4. Приложение создает новую сеть Network2, вызывая WifiConfig_AddDuplicateNetwork для дублирования конфигурации Network1. Затем он связывает корневой ca2 с сетью 2 и включает Network2. Если на устройстве включена сеть Network2 и может подключаться к Интернету, устройство будет использовать ее, если network1 недоступен.

  5. Приложение ежедневно опрашивает, вызывая WifiConfig_GetConnectedNetworkId , чтобы определить, к какой сети подключено устройство.

    Если ежедневное проверка подключенной сети завершается сбоем, ошибка может возникнуть из-за проблемы с сертификатом на стороне сервера или устройства или из-за другой проблемы. Дополнительные сведения см. в статье Устранение неполадок с сетью .

    Если устройство подключено к Network1, это означает, что срок действия сертификата еще не истек и все работает правильно. Приложение повторяет этот шаг, пока устройство не подключится к Network2.

    Если устройство подключено к Network2, это означает, что срок действия старого сертификата истек, обновленная PKI настроена на сервере RADIUS и устройство может пройти проверку подлинности сервера с помощью корневого ca2.

  6. При правильной работе устройства с Network2 приложение завершает изменения в конфигурации сети:

    • Переименовывает корневой CA2 в корневой CA1 путем вызова CertStore_MoveCertificate. Эта функция перезаписывает просроченный корневой CA1 содержимым корневого CA2.
    • Перезагружает конфигурацию Network1, вызывая WifiConfig_ReloadConfig. Конфигурация Network1 теперь соответствует текущей сети.
    • Удаляет конфигурацию Network2, вызвав WifiConfig_ForgetNetworkById.

Обновление сертификата клиента

Сертификат клиента состоит из пары открытого и закрытого ключей, которые используются для проверки подлинности устройства Azure Sphere. Как и сертификат корневого ЦС, срок действия сертификата клиента будет время от времени истекать, и устройство должно иметь возможность представить новый сертификат. Ваше высокоуровневое приложение отвечает за получение нового сертификата до истечения срока действия существующего сертификата. Приложение может получить дату и время истечения срока действия сертификата, вызвав CertStore_GetCertificateNotAfter.

На следующем рисунке показана эта процедура. Этот шаблон позволяет коду обновления сертификата использовать постоянные идентификаторы сертификатов, такие как ClientCert1 и ClientCert2, вместо создания уникального имени для каждого нового сертификата. Кроме того, он не требует переключения сети или очистки сертификата клиента.

Поток приложения для обновления сертификата клиента

Высокоуровневое приложение должно выполнить следующие действия, чтобы легко обрабатывать обновление сертификата клиента:

  1. В рамках обычной работы приложение настраивает Network1 типа WifiConfig_Security_Wpa2_EAP_TLS. Эта сеть связана с сертификатом клиента для устройства (ClientCert1) и корневым ЦС для сервера RADIUS. Перед запуском процедуры обновления приложение проверяет, подключено ли устройство к Network1, вызывая WifiConfig_GetNetworkIdByConfigName и WifiConfig_GetConnectedNetworkId. Если идентификаторы сети совпадают, приложение может быть уверено, что подключено к предполагаемой сети.

  2. Приложение вызывает CertStore_GetCertificateNotAfter через регулярные интервалы, чтобы определить, когда истечет срок действия сертификата клиента. Кроме того, приложение может хранить дату окончания срока действия в изменяемом хранилище. однако он по-прежнему должен проверка дату окончания срока действия ежедневно и после каждой перезагрузки.

    Приложение сравнивает дату и время окончания срока действия с текущими датами и временем. Если срок действия сертификата истекает в течение заданного порогового периода, приложение получает новый сертификат. Длительность порогового периода — это выбор. Рекомендуется получить новый сертификат не менее чем за четыре недели до истечения срока действия, если устройство находится в автономном режиме в течение длительного периода времени или если возникают неоднократные проблемы с сетью или сервером. Чем раньше вы проверка, тем больше времени потребуется для решения любых проблем.

  3. Приложение получает новый сертификат от соответствующего издателя сертификата. За выбор издателя сертификата отвечает администратор локальной сети.

  4. Приложение сохраняет новый сертификат как ClientCert2, вызывая CertStore_InstallClientCertificate, и добавляет его в конфигурацию Wi-Fi Network1, вызвав WifiConfig_SetClientCertStoreIdentifier.

  5. Приложение перезагружает конфигурацию Wi-Fi путем вызова WifiConfig_ReloadConfig. Этот шаг делает ClientCert2 доступным для устройства для использования в сетевых подключениях.

  6. Проверьте, успешно ли выполнено сетевое подключение.

    • Успешное подключение означает, что ClientCert2 теперь действителен.

      • Переименуйте ClientCert2 на ClientCert1, вызвав CertStore_MoveCertificate.

      • Отключите Network1, вызвав WifiConfig_SetNetworkEnabled , чтобы задать для сети значение false, а затем повторно включите Network1, вызвав WifiConfig_SetNetworkEnabled , чтобы задать для параметра Состояние Включено значение true. Отключение и повторное включение конфигурации делает содержимое переименованного сертификата доступным для приложения.

    • Сбой подключения означает, что clientCert2 еще не действителен или что произошла другая ошибка.

      • Если сертификат еще не действителен, перейдите к шагу 7, чтобы вернуть конфигурацию сети в исходное состояние.
      • Если произошла другая ошибка, см. раздел Устранение неполадок с сетью , чтобы найти справку и повторить подключение.
  7. Независимо от того, успешно ли выполнено сетевое подключение, перезагрузите конфигурацию Wi-Fi путем вызова WifiConfig_ReloadConfig. Если подключение выполнено успешно, в перезагруженной конфигурации будет использоваться новый ClientCert1, который был заменен clientCert2. Если подключение завершилось сбоем, в перезагруженной конфигурации будет использоваться ClientCert1.