次の方法で共有


証明書のライフ サイクルと更新

クライアント証明書とキーのペアと CA 証明書の有効期限は定期的に切れます。 ネットワーク インフラストラクチャとデバイスは、接続を失うことなく、証明書の有効期限を処理し、新しい証明書を提示できる必要があります。 RADIUS サーバー認証で使用されるルート CA 証明書と、デバイス認証で使用されるクライアント証明書では、更新にはさまざまな方法が必要です。

注意

証明書 ID はシステム全体であるため、az sphere コマンドまたは新しい証明書を追加する関数呼び出しによって、以前のコマンドまたは関数呼び出しによって追加された証明書が上書きされ、ネットワーク接続エラーが発生する可能性があります。 明確な証明書の更新手順を開発し、証明書 ID を慎重に選択することを強くお勧めします。

Azure Sphere で証明書 ID を使用する 方法の詳細については、「証明書 ID」を参照してください。

ルート CA 証明書を更新する

CA 証明書は、RADIUS サーバー上の認証証明書のルート CA です。 CA 証明書の有効期限が切れた場合、またはサーバーの PKI が変更された場合 (たとえば、サーバーが別の証明機関から新しいルート CA を取得した場合)、Azure Sphere デバイスは RADIUS 認証サーバーを認証できなくなります。 ただし、デバイスは引き続き機能する必要があります。

一般的なワイヤレス ネットワークでは、"ナイフエッジ" カットオーバーを実行することはできません。つまり、ルート CA が無効になったときに、すべての Azure Sphere デバイスを正確に更新することはできません。 重要な時点でデバイスがオフラインになっている場合や、タイムキーピングの精度がインストールによって異なる場合があります。 現在の証明書が期限切れまたは変更される前に、高レベルのアプリケーションで新しいルート CA 証明書を取得できる必要があります。そのため、必要に応じて新しい証明書を使用する準備が整います。

推奨される方法は、既存のネットワークと同じ構成を持ち、新しいルート CA 証明書を使用する 2 つ目のネットワークを作成して有効にすることです。 既存のルート CA 証明書が元のネットワークで失敗すると、OS は自動的に 2 つ目のネットワークへの接続を試みます。 アプリケーションは、元のネットワーク上の証明書を新しいルート CA に置き換え、2 つ目のネットワークを削除できます。 その後、デバイスは、新しいルート CA を持つ元のネットワークを使用して接続できます。 次の図は、この方法をまとめたものです。

ルート CA 証明書を更新するアプリケーション フロー

ルート CA 証明書の更新をシームレスに処理するには、高度なアプリケーションで次の手順を実行する必要があります。

  1. 通常の操作の一環として、アプリケーションは種類 の Network1 を構成します WifiConfig_Security_Wpa2_EAP_TLS。 このネットワークは、デバイスのクライアント証明書とルート CA1 (RADIUS サーバーの元のルート CA) にリンクされます。

  2. RootCA の有効期限が切れる約 90 日前に、デバイスは、RADIUS サーバーの新しいルート CA 証明書が間もなく必要になるというクラウドからデバイスへの通知を受け取ります。 通知は、ネットワーク管理者または他のオペレーターによってトリガーできます。可能な通知メカニズムには、Azure IoT Hubまたは Azure IoT Central のクラウドからデバイスへのメッセージが含まれます。

    ネットワーク管理者は、RADIUS サーバー上の証明書を更新し、Azure Sphere デバイスが適切に更新されるようにする責任を負います。

  3. アプリは新しいルート CA を取得し、 CertStore_InstallRootCACertificate を呼び出してルート CA2 として保存します。

  4. このアプリは、 WifiConfig_AddDuplicateNetworkを呼 び出して Network1 構成を複製することで、新しいネットワーク Network2 を作成します。 次に、ルート CA2 をネットワーク 2 にリンクし、Network2 を有効にします。 デバイスで Network2 が有効になっていて、インターネットに接続できる場合、Network1 が使用できない場合、デバイスはそのデバイスを使用します。

  5. アプリは、 WifiConfig_GetConnectedNetworkId を呼び出してデバイスが接続されているネットワークを決定することで、毎日ポーリングします。

    接続されたネットワークの毎日のチェックが失敗した場合、エラーは、サーバー側またはデバイス側の証明書の問題、またはその他の問題によって発生する可能性があります。 ヘルプについては、「 ネットワークの問題のトラブルシューティング 」を参照してください。

    デバイスが Network1 に接続されている場合、これは証明書の有効期限がまだ切れていないこと、およびすべてが正常に動作していることを意味します。 アプリは、デバイスが Network2 に接続するまでこの手順を繰り返します。

    デバイスが Network2 に接続されている場合は、古い証明書の有効期限が切れ、更新された PKI が RADIUS サーバーに設定され、デバイスはルート CA2 を使用してサーバーを認証できることを意味します。

  6. デバイスが Network2 で正常に動作している場合、アプリはネットワーク構成の変更を完了します。

    • CertStore_MoveCertificateを呼び出してルート CA2 の名前をルート CA1 に変更します。 この関数は、有効期限が切れたルート CA1 をルート CA2 の内容で上書きします。
    • WifiConfig_ReloadConfigを呼び出して Network1 構成を再読み込み します。 Network1 構成が現在のネットワークと一致するようになりました。
    • WifiConfig_ForgetNetworkByIdを呼び出して Network2 構成 削除します。

クライアント証明書を更新する

クライアント証明書は、Azure Sphere デバイスの認証に使用される公開キーと秘密キーのペアで構成されます。 ルート CA 証明書と同様に、クライアント証明書は随時期限切れになり、デバイスは新しい証明書を提示できる必要があります。 既存の証明書の有効期限が切れる前に、高レベルのアプリケーションが新しい証明書を取得する必要があります。 アプリは、 CertStore_GetCertificateNotAfterを呼び出すことによって、証明書の有効期限が切れる日時を取得できます。

次の図は、この手順をまとめたものです。 このパターンにより、証明書の更新コードでは、新しい証明書ごとに一意の名前を作成する代わりに、ClientCert1 や ClientCert2 などの定数証明書 ID を使用できます。 さらに、ネットワーク スワップやクライアント証明書のクリーンアップは必要ありません。

クライアント証明書を更新するためのアプリケーション フロー

クライアント証明書の更新をシームレスに処理するには、高度なアプリケーションで次の手順を実行する必要があります。

  1. 通常の操作の一環として、アプリケーションは種類 の Network1 を構成します WifiConfig_Security_Wpa2_EAP_TLS。 このネットワークは、デバイスのクライアント証明書 (ClientCert1) と RADIUS サーバーのルート CA にリンクされます。 アプリが更新手順を開始する前に、 WifiConfig_GetNetworkIdByConfigNameと WifiConfig_GetConnectedNetworkIdを呼び出すことによって、デバイスが Network1 接続されていることを確認します。 ネットワーク ID が一致する場合、アプリが目的のネットワークに接続されていることを確認できます。

  2. アプリは CertStore_GetCertificateNotAfter を定期的に呼び出して、クライアント証明書の有効期限を決定します。 または、アプリケーションで有効期限を変更可能なストレージに格納することもできます。ただし、再起動するたびに、有効期限が毎日チェックされます。

    アプリは、有効期限の日付と時刻を現在の日付と時刻と比較します。 証明書が所定のしきい値期間内に期限切れになった場合、アプリは新しい証明書を取得します。 しきい値期間の長さが選択されます。 ベスト プラクティスとして、デバイスが長時間オフラインになっている場合や、ネットワークまたはサーバーの問題が繰り返し発生した場合に備えて、有効期限の少なくとも 4 週間前に新しい証明書を取得することをお勧めします。 チェックが早いほど、問題を解決する時間が長くなります。

  3. アプリは、適切な証明書発行者から新しい証明書を取得します。 証明書発行者の選択は、ローカル ネットワーク管理者の責任です。

  4. アプリは、CertStore_InstallClientCertificateを呼び出して新しい証明書 ClientCert2 として保存し、WifiConfig_SetClientCertStoreIdentifier を呼び出して Network1 Wi-Fi 構成に追加します。

  5. アプリは、WifiConfig_ReloadConfigを呼び出して Wi-Fi 構成を再読み込み します。 この手順では、ネットワーク接続で使用するために ClientCert2 をデバイスで使用できるようにします。

  6. ネットワーク接続が成功したかどうかを確認します。

    • 接続が成功したということは、ClientCert2 が有効になったことを意味します。

      • CertStore_MoveCertificateを呼び出して ClientCert2 の名前を ClientCert1 変更します。

      • Network1 を無効にするには 、WifiConfig_SetNetworkEnabled を呼び出してネットワークの Enabled 状態を false に設定し、 WifiConfig_SetNetworkEnabled を呼び出して Network1 を再度有効にして Enabled 状態を に true設定します。 構成を無効にして再度有効にすると、名前が変更された証明書の内容をアプリケーションで使用できるようになります。

    • 接続に失敗した場合は、ClientCert2 がまだ有効になっていないか、他のエラーが発生したことを意味します。

  7. ネットワーク接続が成功したかどうかに関係なく、WifiConfig_ReloadConfigを呼び出して Wi-Fi 構成を再読み込み します。 接続が成功した場合、再読み込みされた構成では、新しい ClientCert1 が使用されます。これは ClientCert2 に置き換えられました。 接続に失敗した場合、再読み込みされた構成では ClientCert1 が使用されます。