Android デバイスで証明書ベースの認証を行うためのサーバーの構成

企業が、クライアント証明書を使用したユーザー認証を希望する理由はいくつかあります。管理者が、MDM ソリューションを使用して、証明書を簡単に発行したり、取り消したりすることができます。ユーザーが資格情報を記憶したり、提供したりする必要はありません。また、証明書を使用する 2 要素認証では、セキュリティをさらに高めることができます。

管理者は、サーバーやゲートウェイにインストールされている認証局タイプの証明書を生成します。この証明書を使用して、管理者は CA 証明書からチェーンするクライアント証明書を生成できます。これらにはそれぞれ、ユーザーに固有のいくつかのデータが含まれています。管理者は、任意の証明書フィールドにこのデータを配置できます。その後、クライアント証明書がユーザーに配布されます (あるいは、ユーザーのデバイスに直接配布されます)。

ユーザーがサーバーにアクセスするには、アプリケーションからクライアント証明書をサーバーに渡して SSL ハンドシェークを完了し、サーバーとのセキュア接続を確立する必要があります。通常、使用する証明書をユーザーが一度指定すると、アプリケーションがそれを記憶して、以降の接続で同じ証明書を使用します。2 要素認証を使用するようにサーバーが構成されている場合のみ、ユーザーはユーザー ID とパスワード情報を入力する必要があります。

IBM Verse 固有のサポート

IBM Verse Android バージョン 9.5.5 では、証明書ベースの認証のサポートが追加されています。以下の 2 つの認証シナリオがサポートされています。
  1. サーバー (またはアクセスゲートウェイ) は、クライアントデバイスに証明書の提供のみを求めます。
  2. サーバー (またはアクセスゲートウェイ) は、クライアントに証明書およびユーザー ID/パスワードの提供を求めます。
  3. サーバー (またはアクセスゲートウェイ) は、クライアントに証明書またはユーザー ID/パスワードの提供を求めます。
注: クライアント証明書のみの認証モデルから、ユーザー名/パスワードによる認証モデルへの移行はサポートされず、IBM Verse for Android アプリケーションのアンインストールと再インストールが必要になります。
注: クライアント証明書とユーザー名/パスワードによる認証の両方が使用されているデプロイメント環境での混乱を減らすために、証明書のユーザー ID と資格情報のユーザー ID に一貫性のある名前を使用するようにしてください。IBM Verse for Android の [設定] > [アカウント] 画面に表示するユーザー名の識別には、クライアント証明書の [共通名] フィールドが照会されます。なんらかの理由でこれが読み取れない場合は、証明書のインストール中にユーザーが指定した名前 - 別名 - が、アプリケーションでのアカウント ID に使用されます。

Android では、タイプ PKCS#12 の証明書ストアがサポートされています。一般に、該当するファイルには拡張子「.p12」または「.pfx」が付いています。そのため、管理者がクライアント証明書を生成するときに、証明書を PKCS#12 ストアにエクスポートする必要があります。

通常、証明書ストアにアクセスするにはパスワードが必要です。管理者は、証明書ベースの認証への移行に関する指示とともにパスワードをユーザーに提供します。

管理者は、サーバーがクライアント証明書を要求するように構成する必要があります。また、クライアント証明書がチェーンしなければならない CA 証明書を指定する必要があります。さらに、管理者はユーザー固有の情報を取得するためにクライアント証明書のどのフィールドが使用されるか、ユーザーのアイデンティティを判別するためにサーバーでそれがどのように使用されるかを構成する必要があります。

現在 Verse を使用している企業は、管理者がすべてのユーザーにクライアント証明書を配布した後、管理者がサーバー構成を変更して、ユーザーにクライアント証明書の提供を求めるようにすることができます。

最適なユーザーシナリオ

管理者は、Android for Work を使用してクライアント証明書をデプロイし、インストールします。Android for Work プロファイルでも、Verse で使用される証明書別名を指定することができます。この場合、Verse はデプロイされた証明書をサーバーが要求するとすぐに使用するため、移行はエンドユーザーに認識されない形で行われます。

以下は、Android for Work を使用して証明書をインストールする方法に関する資料へのリンクです。

https://developers.google.com/android/work/security#grant_access_and_remove_access_to_a_client_certificate

Android for Work 設定のリストは APK に定義されており、以下からアクセスできます。

https://developers.google.com/android/work/build-dpc#apply_managed_configurations_to_work_apps

AIDL API インターフェースを使用して、クライアント証明書別名を設定できます。SetConfig 呼び出しで、キー「ClientCert.Alias」を使用します。

「次善」のユーザーシナリオ

管理者は、Mobile Device Manager (MDM) を使用してクライアント証明書ストアファイルをデプロイしますが、証明書はインストールされません (Android for Work のみがこれを行えます)。この場合、サーバーで証明書が要求されると、クライアント接続は失敗します。証明書が必要であることが Verse からユーザーに通知されます。その後、ユーザーは、クライアント証明書のインストール/選択を行うように求められます。ユーザーは [インストール] を選択し、使用する証明書ストアを選択して、ストアのパスワードを指定し、新たにインストールされた証明書を選択する必要があります。すると IBM Verse がサーバーに接続できるようになります。

基本レベルのユーザーシナリオ

管理者は証明書ストアをユーザーに提供します。ユーザーはデバイスにそれを取り込んでから、上記のケースのインストール手順を実行する必要があります。

「新規インストール」のユーザーシナリオ

デバイスに Verse Android 9.5.5 を初めてインストールするときに、Verse は MDM によって提供される構成データを使用できます。このデータには、サーバーの URL が含まれている場合があります。MDM によって提供されない場合、ユーザーはサーバー の URL を入力する必要があります。指定されたサーバーでクライアント証明書が必要であることが Verse によって検出されると、ユーザーは、デバイスに既にインストールされている証明書を選択するか、任意の証明書をインストールするかを尋ねられます。正しい証明書が選択されると、構成プロセスが進められます。ユーザー ID とパスワードも必要な場合、この時点で、ユーザーはその情報を提供するように求められます。

証明書ベースの認証に対応した IMC のセットアップ

証明書の生成には、さまざまなプログラムを使用できます。それらの使用方法は本書の範囲外です。

各種ゲートウェイソフトウェアを使用して、証明書ベースの認証を実装できます。以下の例は、IMC 6.1.5.2 を使用して IMC プロファイルを作成する方法を示しています。

プロファイルの [LDAP] タブでは、以下が行えます。
  1. 許可されたユーザー ID のディレクトリをホストしている Traveler サーバーを選択します。
  2. [パスワードによる確認を無効にする] が選択されていることを確認します。
  3. [追跡 LDAP 参照] が選択されていることを確認します。
プロファイルの [LTPA/SSO] タブでは、以下が行えます。
  1. [LTPA を有効にする] が選択されていることを確認します。
  2. LTPA トークンドメインを Traveler サーバーのアドレスに設定します。
  3. 適切な LTPA トークンのユーザー ID フィールドを選択します。
  4. [SSO を有効にする] が選択されていることを確認します。
  5. 適切な SSO Cookie ドメインを設定します。
  6. [セキュア接続の使用] が選択されていることを確認します。
  7. [クライアント証明書の検証によるサーバー・セッション] が選択されていることを確認します。
  8. [クライアント証明書からの抽出] が選択されていることを確認します。

[モード] タブで、[HTTP 401 基本許可に関する要求] が選択されていることを確認します。