IBM Worklight で開発するモバイル・アプリで FIPS 140-2 準拠の HTTPS 暗号化を使用可能にする

ハイブリッドおよびネイティブ・モバイル・アプリのためのセキュアなアプリケーション・レベルの HTTP/HTTPS クライアント・ライブラリー

IBM の研究所では、アプリケーション・レベルの HTTP/HTTPS クライアント・ライブラリーを作成しました。このライブラリーを使用すれば、モバイル・アプリケーション内で直接、FIPS 140-2 に従って暗号化した HTTP/HTTPS リクエストを実行できるようになります。この記事では、ステップバイステップの手順に従って、IBM Worklight Studio で開発するハイブリッドおよびネイティブ iOS/Android アプリに HTTP/HTTPS クライアント・ライブラリーを統合します。統合した後は、ライブラリーの API を呼び出して FIPS 140-2 に従って暗号化したネットワーク・リクエストを作成し、そのリクエストをプライベート・エンタープライズ・ネットワークのファイアウォールの内側にある FIPS 140-2 認定 SSL 終端点に (リバース・プロキシー・アーキテクチャーを介して) 送信することも、ファイアウォールの外側にある終端点に送信することもできます。

Benjamin Fletcher, Ph.D., Software Engineer, IBM

Author photo - Ben Fletcher Dr. Benjamin Fletcher は、ニューヨーク州ヨークタウン・ハイツにある TJ Watson Research Center の ETSD (Emerging Technologies Solutions Development) Group にソフトウェア・エンジニアとして勤務しています。彼の研究の中心となっているのは、スマート・モバイル端末を対象とした新しいエンタープライズ・ソリューションを開発することです。ETSD 研究グループに参加する前は、TJ Watson Research Center の Interconnect Technologies グループに所属し、15 nm ノードを超える銅配線終端部のスケーリングに伴う製造問題を調査していました。IBM に入社する前は、オークリッジ国立研究所の Center for Nanophase Materials Science の特別研究員として、主に新しいバイオセンサーと NEMS デバイスの開発に関する研究に携わっていました。彼は、テネシー大学ノクスビル校で材料工学の博士号を取得し、コンピューターのハードウェアとソフトウェアの両方での広範な研究の経験を持っています。



Eric Barkie, Software Engineer, IBM

Author photo - Eric BarkieEric Barkie は、1998 年にコンピューター・サイエンスの理学士号を取得してニューヨーク州立大学プラッツバーグ校を卒業しました。彼は、ニューヨーク州ヨークタウン・ハイツにある IBM Thomas J. Watson Research Center にシニア・ソフトウェア・エンジニアとして勤務し、現在は Emerging Client and Network Technologies の開発者です。余暇は、いつもホッケーを楽しんだり観戦したりしています。



Bhargav Perepa , WebSphere Architect and IT Specialist, IBM

Bhargav PerepaBhargav Perepa は、ワシントン DC にある IBM Federal Software Group の WebSphere アーキテクト兼 IT スペシャリストです。以前は、IBM Chicago の Austin WebSphere Development Lab で、開発者として Smalltalk および C++ の開発に取り組んだ経験もあります。彼はシカゴのイリノイ工科大学でコンピューター・サイエンスの修士号を、テキサス大学オースチン校で経営学修士号 (MBA) を取得しました。


developerWorks 貢献著者レベル

2013年 10月 24日

IBM Worklight をまだ試したことがありませんか?

Worklight Developer Edition を今すぐダウンロードして試してください。

この Eclipse プラグインは、iOS、Android だけでなく Blackberry および Windows Phone 端末を対象としたハイブリッド・アプリ、ネイティブ・アプリ、および Web アプリを視覚的に作成、テスト、デプロイするための開発プラットフォーム兼サーバー・プラットフォームを提供します。

評価版は無料です。詳しくは、ここをクリックしてください。

モバイル・アプリケーション開発者は HTTP または HTTPS リクエストを作成すると、そのリクエストを生成して送信するために、通常は端末やオペレーティング・システムで提供しているメソッドを呼び出します。これらのメソッド (一般にはデータ暗号化などの下位レベルの操作の抽象化) は、HTTP/HTTPS クライアント・クラスに含まれる上位レベルのメソッドとプロパティーを通して開発者に公開されます。

開発者にとって、この抽象化によってもたらされる使いやすさにはメリットがありますが、端末や OS のメーカーのそれぞれによって提供される HTTP/HTTPS クライアント・クラスの実装に依存することにはトレードオフがあります。この記事では、ハイブリッド・アプリケーションおよび iOS/Android のネイティブ・モバイル・アプリケーションで直接 HTTP/HTTPS リクエストを作成するための別の手段 (アプリケーション・レベル HTTP/HTTPS クライアント・ライブラリー・スイート) を紹介します。

アプリケーション・レベル HTTP/HTTPS クライアント・ライブラリーは、OpenSSL FIPS 2.0.3 (この後の「クライアント・ライブラリーにおける FIPS 140-2 への準拠」を参照) を使用して作成されており、オペレーティング・システム・ライブラリーに依存せずにデータ暗号化を行います。そのため、これらのライブラリーは独特の機能を提供し、比類のない柔軟な構成が可能です。モバイル開発者はこれらのクライアント・ライブラリーを使用して、HTTP/HTTPS リクエストをファイアウォールの外側にある SSL 終端点に直接送信することも、ファイアウォールの内側にある SSL 終端点にリバース・プロキシーを介して間接的に送信することもできます。

アプリケーション・レベル HTTP/HTTPS クライアント・ライブラリーは、IBM Security Access Manager、WebSphere DataPower Service Gateway XG45、WebSphere DataPower Integration Appliance XI、および WebSphere Application Server などの IBM 製品にも対応しています。

この記事では、Eclipse IDE 内で実行される IBM Worklight Studio モバイル開発プロジェクトにアプリケーション・レベル HTTP/HTTPS クライアント・ライブラリーを統合するプロセスをステップバイステップで説明します。この記事の最後では、HTTP/HTTPS クライアント・ライブラリーが Worklight Studio V5.0.6.1 プロジェクトにインストール済みかつセットアップ済みとなり、クライアント・ライブラリーが組み込まれて構成された単純なハイブリッド・デモ・アプリ、iOS デモ・アプリ、または Android デモ・アプリが作成済みとなり、さらにはクライアント・ライブラリーの API を呼び出して FIPS 140-2 に従って暗号化された HTTPS リクエストをモバイル・アプリケーションから直接送信した状態になります。

 

この記事を最大限活用するには、IBM Worklight の開発環境である IBM Worklight Studio を使用した、ハイブリッド・アプリケーションとネイティブ (iOS および Android) アプリケーションのモバイル・アプリケーション開発を十分に理解している必要があります。「Getting started with IBM Worklight」のチュートリアルとサンプル・コードを調べてください。

 

HTTP/HTTPS クライアント・ライブラリーおよび IBM Worklight v5.0.6.1 InterimFix のインストール

ビルド環境について

この記事で使用するデモ・アプリの開発環境は、IBM Worklight v5.0.6.1 InterimFix 201309171955 (Fix Central で Fix ID 201309171955 を参照してください。記事で説明する機能を使用するには、この InterimFix バージョンが必要です) と、Eclipse Classic IDE v4.2 にインストールされた Android Development Tools v21.1.0 で構成されています。ネイティブ iOS アプリケーションは、XCode v4.6 を使用して作成しました。開発ツールはすべて、Mac OS X v10.7.5にインストールしました。

まず始めに、IBM Worklight クライアント・ライブラリー (Worklight 対応の iOS および Android FIPS HTTP/S クライアント・ライブラリー) をダウンロードします。これらのライブラリーは、HTTPClient.zip という名前のファイルに格納されているので、このファイルを都合の良い場所に解凍または抽出します。抽出されたファイルには後でアクセスして、IBM Worklight Studio プロジェクトに追加します。iOS アプリケーションの場合はさらに、パッケージに提供されている incore_macho ファイル (HTTPClient/iOS/incore_macho) を実行可能な場所へコピーします。一般に、その場所は $PATH に含まれるディレクトリーです (Apple Mac OSX システムでは /usr/local/bin などです)。

クライアント・ライブラリーの機能の多くは他のバージョンの Worklight Studio でも有効ですが、現時点で FIPS 140-2 に準拠したクライアント・サーバー間のトラフィックをサポートしているのは Worklight v5.0.6.1 InterimFix 201309171955 のみです。記事の手順に従うためには、Worklight v5.0.6.1 InterimFix を今すぐインストールしてください。

クライアント・ライブラリーにおける FIPS 140-2 への準拠

NIST (National Institute of Standards and Technology: 米国国立標準技術研究所) から発行されている FIPS (Federal Information Processing Standards: 連邦情報処理規格) 出版物 140-2 は、公開インフラストラクチャーでの暗号化方式を認定する際に適用される米国連邦政府のコンピューター・セキュリティー標準です。SSL 終端点により要求される場合、データ暗号化に対してアプリケーション・レベル HTTP/HTTPS クライアント・ライブラリーの OpenSSL FIPS 2.0.3 オブジェクト・モジュールが使用されます。各ライブラリーの FIPS オブジェクト・モジュールは、OpenSSL Foundation から DVD で提供されるソース・コードをそのままコンパイルして作成しました。makefile とビルド・スクリプトは OpenSSL Foundation のリポジトリーからダウンロードし、ローカル・ビルド環境を反映する変更だけを加えています (OpenSSL FIPS 2.0.3 の詳細については、「参考文献」を参照してください)。

FIPS オブジェクト・モジュール (fipscanister.o) が含まれている libcrypto は、静的ライブラリー (iOS 実装用) と動的ライブラリー (Android 実装用) にコンパイルされています。iOS の場合、FIPS オブジェクト・モジュールを参照するアプリケーションがコンパイルされる前に、incore ツールによって FIPS オブジェクト・モジュールの完全性を検証します。Android の場合は、libcrypto.so.1.0.0 のコンパイル後に、incore ツールを使用して FIPS オブジェクト・モジュールの完全性を検証済みです。

HTTP/HTTPS ライブラリー内では、FIPS_mode_set() 関数によって FIPS モードが有効にされます。クライアント・ライブラリーは、HTTP/HTTPS リクエストを実行する前には常に FIPS モードのステータスを再チェックし、FIPS モードが true でない場合には例外をスローします。結果はデバッグ・コンソールに表示されます。ライブラリーがスローした例外は、FIPS 準拠エラーとして処理することができます。


HelloHTTPClient

これからデモ・アプリを使用して、アプリケーション・レベル HTTP/HTTPS クライアント・ライブラリーを IBM Worklight Studio プロジェクトに統合するプロセスを実演します。基本的なハイブリッド・アプリケーションを作成した後、iOS および Android 対応のアプリケーション環境をセットアップして構成する手順を説明します。このデモに必要なすべてのコードは、HTTPClient.zip ファイル内に揃っています (このファイルをダウンロードするには、「参考文献」を参照してください)。

まずは、ハイブリッド・アプリケーションを対象とした Worklight Studio プロジェクトを作成して構成するところから始めます。

  1. Eclipse IDE で新規 Worklight プロジェクトを作成するには、ツールバーの Worklight アイコンをクリックするか (図 1 を参照)、「File (ファイル)」 > 「New (新規)」 > 「Project (プロジェクト)」 > 「Worklight Project (Worklight プロジェクト)」の順に選択して「Next (次へ)」ボタンをクリックします。
    図 1. Eclipse IDE ツールバーの Worklight アイコン
    Eclipse IDE ツールバーの Worklight アイコンを示すスクリーン・ショット
  2. 「Hybrid Application (ハイブリッド・アプリケーション)」プロジェクト・テンプレートを選択し、プロジェクト名を指定してから「Next (次へ)」ボタンをクリックします。
    図 2. ハイブリッド・アプリケーション・プロジェクトを作成する
    使用可能なアプリケーション・テンプレートのリストと、プロジェクトに名前を付けるためのフィールドを示すスクリーン・ショット
  3. アプリケーションの名前を入力して、「Finish (完了)」をクリックします。
    図 3. アプリケーションに名前を付けてアプリケーションを作成する
    アプリケーション名として「HelloHTTPClientApp」と入力するフィールドを示すスクリーン・ショット
  4. 「apps」 > 「HelloHTTPClientApp」 > 「common」 > 「js」の順に選択すると表示されるフォルダーに、JavaScript ファイル HTTPClient/common/js/WLHTTPRequest.js を追加します。
    図 4. HTTPClient/common/js/WLHTTPRequest.js をプロジェクトに追加する
    プロジェクトに JavaScript ファイルを追加する
  5. 「apps」 > 「HelloHTTPClientApp」 > 「common」 > 「HelloHTTPClientApp.html」の順に選択すると表示されるファイルに、uVPN.js および WLHTTPRequest.js という JavaScript インターフェース・ファイルへの参照を追加します (図 5 を参照)。uVPN.js のほうは、記事の後のほうでプロジェクトに統合します。
    図 5. JavaScript インターフェース・ファイルを HelloHTTPClientApp.html に追加する
    プロジェクトに 2 つの JavaScript インターフェース・ファイルを追加する
  6. 「apps」 > 「HelloHTTPClientApp」 > 「common」 > 「js」 > 「initOptions.js」の順に選択すると表示されるファイルに、enableFIPS オプションを追加します (図 6 を参照)。enableFIPStrue に設定すると、すべての JavaScript HTTP/HTTPS リクエストに対して FIPS が有効になります。
    図 6. initOptions.js に enableFIPS initOption を追加する
    initOptions.js に enableFIPS initOption を追加する

続いて、「apps」 > 「HelloHTTPClientApp」 > 「common」の順に選択すると表示される common フォルダー内にある HTML ファイルと JavaScript ファイルに、デモ・アプリケーション UI を追加します。さらに、adapters フォルダーにデモ Worklight サーバー・アダプターを追加します。

  1. この記事の冒頭でダウンロードした HTTPClient.zip ファイルの HTTPClient/demoUI/common フォルダーに格納されているデモ・アプリケーション UI を見つけます。
  2. 「apps」 > 「HelloHTTPClientApp」 > 「common」 > 「js」の順に選択すると表示されるフォルダーに、HTTPClient/demoUI/common/js/HelloHTTPClientApp.js および HTTPClient/demoUI/common/js/usersCollection.js をコピーします。
  3. 「apps」 > 「HelloHTTPClientApp」 > 「common」の順に選択すると表示されるフォルダーに、HTTPClient/demoUI/common/HelloHTTPClientApp.html をコピーします。
  4. HTTPClient/demoUI/adapters フォルダー内にあるデモ・アダプターを見つけて、user adapter フォルダーを project adapters フォルダーにコピーします。
  5. 「apps」 > 「HelloHTTPClientApp」の順に選択すると表示されるフォルダーで application-descriptor.xml ファイルを見つけて、FIPS 140-2 準拠の SSL 終端点を指すように worklightServerRootURL 変数を更新します (例えば、Worklight サーバーを指すリバース・プロキシー、または FIPS モードで実行される Worklight サーバーのいずれか、あるいはその両方を使用することもできます)。

次に、新規デモ・アプリをビルドしてデプロイします。

  1. 「apps」 > 「HelloHTTPClientApp」の順に選択してオプション・メニューを表示するか、「Run (実行)」 > 「Run As (実行)」の順に選択してオプション・メニューを表示し、「Build All and Deploy (すべてをビルドしてデプロイ)」オプションを選択します。
    図 7. すべてをビルドしてデプロイする
    「Build All and Deploy (すべてをビルドしてデプロイ)」を選択する
  2. project adapters フォルダー内のアダプター (「adapters」 > 「user」) を選択してオプション・メニューを表示するか、「Run (実行)」 > 「Run As (実行)」の順に選択してオプション・メニューを表示し、「Deploy Worklight Adapter (Worklight アダプターのデプロイ)」オプションを選択します。
    図 8. Worklight アダプターをデプロイする
    アダプターをデプロイする
  3. プロジェクト・ワークスペースで「folder」 > 「bin」の順に選択して表示されるフォルダーから HelloHTTPClientApp-common.wlapp と (例えば、user.adapter などの) 使用するアダプターを (図 9 を参照)、管理コンソールを介して Worklight サーバーにアップロードします (図 10 を参照)。新しい Worklight 環境を作成するたびに、更新した wlapp のアップロードも必要になります。
    図 9. プロジェクト・ワークスペースのフォルダー内で HelloHTTPClientApp-common.wlapp を見つける
    プロジェクト・フォルダー内でアプリを見つける
    図 10. HelloHTTPClientApp-all.wlapp を Worklight サーバーにアップロードする
    Worklight アプリケーションをアップロードする

iOS でのクライアント・ライブラリーの統合

基本的な Worklight Studio プロジェクトとハイブリッド・アプリケーションが完成したところで、このセクションでは iOS 用の HTTP/HTTPS クライアント・ライブラリーを iOS Worklight Studio アプリケーション環境に統合します。Android 開発者は、Android アプリケーション環境をセットアップして構成する手順までスキップしても構いません。

Worklight Studio で iOS アプリケーション環境を作成するプロセスは、手順の最初でハイブリッド・アプリケーションを作成したときのプロセスと同様ですが、iOS 端末のタイプ (iPhone または iPad) を選択する必要があります。ここでは、iPhone 端末のデモ・アプリを構成していることに注意してください。

  1. 新規 iOS Worklight 環境を作成するには、Eclipse IDE ツールバーの Worklight アイコンをクリックするか、「File (ファイル)」 > 「New (新規)」 > 「Other (その他)」 > 「Worklight Environment (Worklight 環境)」の順に選択して「Next (次へ)」ボタンをクリックします。
  2. 「iPhone」または「iPad」の隣にあるチェック・ボックス (または両方のチェック・ボックス) にチェック・マークを付けてから、「Finish (完了)」ボタンをクリックします (図 11 を参照)。
    図 11. iOS の Worklight 環境を作成する
    チェック・マークが付けられた「iPhone」ボックスのスクリーン・ショット
  3. JavaScript ファイル HTTPClient/iOS/js/uVPN.js「apps」 > 「HelloHTTPClientApp」 > 「iPhone」 > 「js」の順に選択して表示されるフォルダーに追加します (図 12 を参照)。
    図 12. HTTPClient/iOS/js/uVPN.js をプロジェクトに追加する
    HTTPClient/iOS/js/uVPN.js をプロジェクト・フォルダーに追加した画面のスクリーン・ショット
  4. 「apps」 > 「HelloHTTPClientApp」の順に選択してオプション・メニューを表示するか、「Run (実行)」 > 「Run As (実行)」の順に選択してオプション・メニューを表示し、「Build All and Deploy (すべてビルドしてデプロイ)」オプションを選択します。
    図 13. ビルドしてデプロイする
    「Run As (実行)」の選択肢のスクリーン・ショット
  5. プロジェクト・ワークスペースで「folder」 > 「bin」の順に選択して表示されるフォルダーから HelloHTTPClientApp-iphone-X.wlapp を、管理コンソールを介して Worklight サーバーにアップロードします (図 10 を参照)。
  6. XCode プロジェクトを起動するために、「apps」 > 「HelloHTTPClientApp」 > 「iPhone」の順に選択して、「Run As (実行)」オプション・メニューを表示します (図 14 を参照)。あるいは、ツールバーから「Run (実行)」 > 「Run As (実行)」の順に選択するという方法もあります。
    図 14. XCode プロジェクトを起動する
    「Run As (実行)」オプションのスクリーン・ショット
  7. XCode プロジェクトのソース・ルートを開きます。ソース・ルートは、HelloHTTPClientHelloHTTPClientAppIphone.xcodeproj が格納されているフォルダーです。これをファインダーで選択するには ({WORKSPACE}/HelloHTTPClient/apps/HelloHTTPClientApp/iphone/native)、メイン・プロジェクトを右クリックして「Find in Finder (ファインダーで検索)」を選択するか、メイン・プロジェクトを選択して「Full Path (絶対パス)」の隣にある矢印アイコンをクリックします。
    図 15. XCode プロジェクトのソース・ルートを開く
    矢印アイコンをクリックして XCode のソース・ルートを選択する画面のスクリーン・ショット
  8. HTTPClient/iOS/uvpn フォルダーを XCode プロジェクトのソース・ルートにコピーします (図 16 を参照)。
    図 16. uvpn フォルダーをプロジェクトのソースにコピーする
    uvpn フォルダーを選択してプロジェクトのソースにコピーする画面のスクリーン・ショット
  9. プロジェクトを選択して「HelloHTTPClientHelloHTTPClientAppIphone」ターゲットをクリックし、さらに「Build Phases (ビルド・フェーズ)」をクリックすることで、プロジェクトのビルド・フェーズを開きます。ページの最下部にあるプラス (+) 記号をクリックし、libuvpn.alibxml2.dylib、および libicucore.dylib「Link Binary with Libraries (バイナリーをライブラリーとリンクする)」に追加します。libxml2.dyliblibicucore.dylib は、どちらも XCode に付属の標準ライブラリーなので、使用可能なフレームワークの中に記載されているはずです。libuvpn.a については、「Add Other (その他を追加)」をクリックして、コピーしたフォルダーまでナビゲートする必要があります (「uvpn」 > 「libuvpn.a」)。
    図 17. libuvpn.a、libxml2.dylib、libicucore.dylib をプロジェクト・ターゲットに追加する
    3 つの lib ファイルをプロジェクト・ターゲットに追加する

記事の最初で述べたように、クライアント・ライブラリーの iOS 実装には追加のセットアップが必要です。iOS アプリケーションのビルド・フェーズでは、iOS アプリケーションに組み込まれている FIPS オブジェクト・モジュール (fipscanister.o) の完全性を検証するために、incore ツールが実行されていなければなりません。以下の手順では、run スクリプトをビルド・フェーズに追加することで、incore ツールが適切に実行されていることを確認します。

  1. run スクリプトをターゲット・ビルド・フェーズに追加するには、最初に右下隅にある「Add Build Phase (ビルド・フェーズの追加)」ボタンをクリックします (図 18 を参照)。
    図 18. run スクリプトをビルド・フェーズに追加する
    run スクリプトをビルド・フェーズに追加する画面のスクリーン・ショット
  2. 次に、スクリプト用に用意されている場所に、以下に記載するコード行を追加します。図 19 には、以下の絶対パスが示されています。
    {INSTALL_PATH}/incore_macho -exe "$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH"
    図 19. incore_macho 実行コマンドを run スクリプトに追加する
    incore_macho を run スクリプトに追加する画面のスクリーン・ショット{INSTALL_PATH} は、HTTPClient/iOS/incore_macho ファイルをインストールした場所に置き換えてください。
  3. プロジェクトを選択して「HelloHTTPClientHelloHTTPClientAppIphone」ターゲットをクリックし、さらに「Build Settings (ビルド設定)」をクリックすることで、ライブラリー・ヘッダー・ファイルのパスをプロジェクトに追加します。「Search Paths (パスの検索)」セクションで「Header Search Paths (ヘッダー・セクション・パス)」を検索し (図 20 を参照)、以下のファイル・パスを追加します (必ず、それぞれのパスを引用符で囲んでください)。
    "$(SRCROOT)/uvpn"
    "$(SRCROOT)/uvpn/fips"
    "$(SRCROOT)/uvpn/include"
    図 20. ヘッダー・ファイルのパスを XCode プロジェクトのビルド設定に追加する
    ヘッダー・ファイルのパスを追加する画面のスクリーン・ショット
  4. HTTPClient.zip に含まれている HTTPClient/iOS/HTTPClientClasses フォルダーを XCode プロジェクトに追加します。フォルダーをプロジェクト・ファイル階層にドラッグするか、「File (ファイル)」 > 「Add Files (ファイルの追加)」の順に選択して HelloHTTPClientHelloHTTPClientAppIphone に進み、HTTPClient/iOS/HTTPClientClasses フォルダーまでナビゲートします。必ず、「HelloHTTPClientHelloHTTPClientAppIphone」の隣にある「Add to targets (ターゲットに追加)」ボックスにチェック・マークを付けて、「Create groups for any added folders (追加されたフォルダーのグループを作成)」オプションを選択してください。プロジェクト・ディレクトリー内にローカル・コピーを保持しておきたい場合は、項目を宛先グループのフォルダーにコピーすることもできます。
    図 21. HTTPClientClasses フォルダーを XCode プロジェクトに追加する
    ファイル・オプションのスクリーン・ショット
  5. Classes/HelloHTTPClientApp.h を変更します。必要に応じて、Classes/HelloHTTPClientApp.h のロックを解除して編集できるようにしてください。変更対象のステートメントは以下のとおりです。
    	#import <Foundation/Foundation.h>
    	#import "WLCordovaAppDelegate.h"
    
    	@interface MyAppDelegate : WLCordovaAppDelegate {
    
    }

    これらのステートメントを以下のステートメントに置き換えます。

            #import <Foundation/Foundation.h>
    	#import "MicroVPNAppDelegate.h"
    
    	@interface MyAppDelegate : MicroVPNAppDelegate {
    
    }
  6. 同様に、HTTPClientClasses/VPN.h で以下の import 文を変更します。 以下の内容に置き換えます。
    #import "AppDelegate.h"

    with

    #import "HelloHTTPClientApp.h”
  7. 次に、新しい worklight.plist 定義を作成します。「Resources (リソース)」 > 「worklight.plist」の順に選択し、Ctrl キーを押して plist 定義をクリックすることで、オプション・メニューを表示して「Add Row (行の追加)」を選択します。別の方法として、plist 定義のいずれか 1 つを選択してプラス (+) 記号をクリックすることでオプション・メニューを表示することもできます (図 22 を参照)。必要に応じて、worklight.plist のロックを解除してから編集します。
    図 22. worklight.plist を変更する
    新しい plist 定義の行を追加する画面のスクリーン・ショット
  8. キーとして enableFIPS を、そして値として true を設定した plist 定義を作成します (図 23 を参照)。これはテクノロジー・プレビューであるため、ビルドおよびデプロイの実行後には、毎回 worklight.plistenableFIPS パラメーターを再度追加しなければなりません。
    図 23. 値を true に設定した enableFIPS の plist 定義を作成する
    plist 定義のスクリーン・ショット
  9. 最後に、Classes/CDVMainViewController.m を変更して、HTTP/HTTPS クライアント・ライブラリーに javascript インターフェースを追加します。必要に応じて、Classes/CDVMainViewController.m のロックを解除して編集してください。変更する対象は、以下のメソッドです。 これを以下のメソッドに置き換えます。
    - (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request
    navigationType:(UIWebViewNavigationType)navigationType

    リスティングを見るにはここをクリック

    - (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request
    navigationType:(UIWebViewNavigationType)navigationType
    		{
    			NSURL * url = [request URL];
    				if ([[[url scheme] lowercaseString] isEqualToString:@"vpn"])
    			{
    				NSString * path  =  [url path];
    				NSString * command = [url host];
    				NSString * options =  [path substringWithRange:NSMakeRange(1, [path length] - 1)];
    					NSArray* components = [command componentsSeparatedByString:@"."];
    				if (components.count == 2)
    				{
    					NSString* className = [components objectAtIndex:0];
    					NSString* methodName = [components objectAtIndex:1];
    						NSString* fullMethodName = [[NSString alloc] 
                                                                    initWithFormat:@"%@:forWebView:", thodName];
    							if ([NSClassFromString(className) 
                                                                              respondsToSelector:NSSelectorFromString
                                                                                     (fullMethodName)])
    					{
    			 			[NSClassFromString(className) performSelector:NSSelectorFromString
                                                                               (fullMethodName)
                                                                    withObject:options withObject:theWebView];
    					}
    					else
    					{
    			 			[NSException raise:NSInternalInconsistencyException format:
                                                                    @"Class method '%@' not defined against class '%@'.", 
                                                                               fullMethodName, className];
    					}
    			 		[fullMethodName release];
    				}
    				return NO;
    			}
    			else {
    				return [ super webView:theWebView shouldStartLoadWithRequest:
                                               request navigationType:navigationType ];
    			}
    }

Android でのクライアント・ライブラリーの統合

これまでの手順に従っていれば、Android のアプリケーション・レベル HTTP/HTTPS ライブラリーの統合は比較的簡単な作業になるはずです。

  1. 新規 Android Worklight 環境を作成するために、ツールバーの Worklight アイコンをクリックするか、「File (ファイル)」 > 「New (新規)」 > 「Other (その他)」 > 「Worklight Environment (Worklight 環境)」の順に選択して「Next (次へ)」をクリックします。
  2. Android アイコンの隣にあるチェック・ボックスにチェック・マークを付けてから、「Finish (完了)」ボタンをクリックします ( 24 を参照)。
    図 24. Worklight 内で Android 環境を作成する
    Android のプロジェクトおよび環境の名前を指定するフィールドのスクリーン・ショット
  3. プロジェクト・ワークスペースで「folder」 > 「bin」の順に選択して表示されるフォルダーから HelloHTTPClientApp-android-X.wlapp を、管理コンソールを介して Worklight サーバーにアップロードします (図 10 を参照)。
  4. 「apps」 > 「HelloHTTPClientApp」 > 「Android」 > 「js」の順に選択して表示されるフォルダーに、JavaScript ファイル HTTPClient/Android/js/uVPN.js を追加します。
    図 25. HTTPClient/Android/js/uVPN.js をプロジェクトに追加する
    uVPN.js ファイルを追加する画面のスクリーン・ショット
  5. ここで、ファインダーで Android プロジェクトのソース・ルート (AndroidManifest.xml が格納されているフォルダー) を開きます ({WORKSPACE}/HelloHTTPClient/apps/HelloHTTPClientApp/android/native)。ダウンロードした HTTPClient.zip ファイルに含まれている HTTPClient/Android/assetsHTTPClient/Android/libs、および HTTPClient/Android/src フォルダーの中身を、{WORKSPACE}/HelloHTTPClient/apps/HelloHTTPClientApp/android/native 内の対応するディレクトリーにコピーします。HTTPClient/Android 内の以下のファイルが、それぞれに対応するワークスペースの場所にコピーされていることを確認してください。
    HTTPClient\Android\assets to
    {WORKSPACE}/HelloHTTPClient/apps/HelloHTTPClientApp/android/native/assets
    a.	libcrypto.so.1.0.0.zip
    b.	libssl.so.1.0.0.zip
    HTTPClient\Android\libs to
    {WORKSPACE}/HelloHTTPClient/apps/HelloHTTPClientApp/android/native/libs
    c.	armeabi/libuvpn.so
    HTTPClient\Android\src to
    {WORKSPACE}/HelloHTTPClient/apps/HelloHTTPClientApp/android/native/src
    d.	com/uvpn/HybiParser.java
    e.	com/uvpn/VPNHandler.java
    f.	com/uvpn/WebSocketClient.java
  6. Eclipse 内の Worklight プロジェクトを更新して、変更内容を反映します (図 26 を参照)。
    図 26. Eclipse 内の Worklight プロジェクトを更新する
    「Refresh (更新)」ボタンを選択する画面のスクリーン・ショット

    現時点で、フォルダーのレイアウトは図 27 のようになっているはずです。

    図 27. HTTPClient からプロジェクト・フォルダーに Android ファイルをコピーする
    新規フォルダー・レイアウトのスクリーン・ショット
  7. 次は、JavaScript インターフェースを HTTP/HTTPS クライアント・ライブラリーに追加します。「apps」 > 「HelloHTTPClientApp」 > 「Android」 > 「native」 > 「src」 > 「com」 > 「HelloHTTPClientApp」 > 「HelloHTTPClientApp.java」の順に選択して表示されるファイルに、以下の (図 28 に示されている) 4 行のコードを追加してください。
    import com.uvpn.VPNHandler;
    
    VPNHandler vpn = new VPNHandler(this, appView);
    appView.addJavascriptInterface(vpn,"VPN");
    
    WLDroidGap.getWLConfig()._enableFIPS();
    図 28. JavaScript インターフェースを HelloHTTPClientApp.java に追加する
    IDE で選択されたファイルのスクリーン・ショット

ライブラリー API の呼び出し

アプリケーション・レベル HTTP/HTTPS ライブラリーの API は、業界標準の HTTP/HTTPS API に基づいてモデル化されているため、開発者がこれらの API を習得して使用するのは至って簡単です。以下に続くセクションでは、3 つのアプリケーション環境それぞれのライブラリー API について説明し、API の使用方法を説明している標準的なドキュメントの参照情報も記載します。

ハイブリッド・アプリケーションのアプリケーション・レベル・ライブラリー API

JavaScript インターフェース・ファイル HTTPClient/common/js/WLHTTPRequest.js は、標準的な XMLHttpRequest クラスをオーバーライドします。標準的な API を使用して XMLHttpRequest を呼び出し、HTTP/HTTPS ライブラリーおよび、SSL 暗号化で使用する FIPS 140-2 アルゴリズムによって、リクエストを自動的に再ルーティングすることができます。XMLHttpRequest クラスの仕様については、「参考文献」を参照してください。

ネイティブ Android アプリケーションのアプリケーション・レベル・ライブラリー API

Java の FipsHttpClient クラスは、Apache HttpClient のサブクラスです。FipsHttpClient のメソッド、コンストラクター、およびプロパティーは HttpClient と同じですが、注目に値する例外がいくつかあります。FipsHttpClient は、HttpClient による実行メソッドのうち、以下の 2 つのみを実装します。

public HttpResponse execute (HttpUriRequest request, HttpContext context)

および

public HttpResponse execute (HttpUriRequest request)

2 番目の実行メソッドでは、HttpContext が暗黙的に NULL に設定されることに注意してください。その他の HttpClient 実行メソッドでは、いずれも RuntimeException がスローされます。HttpClient クラスの仕様については、「参考文献」を参照してください。

ネイティブ iOS アプリケーションのアプリケーション・レベル・ライブラリー API

HTTP/HTTPS クライアント・ライブラリーには、libcurl (v7.16.3) を変更したものが含まれています。ネイティブ iOS アプリケーションでは、libcurl の C バインディングを直接呼び出して HTTP/HTTPS リクエストを作成および管理することができます。リクエストは、SSL 暗号化に FIPS 140-2 アルゴリズムを使用する HTTP/HTTPS ライブラリーを介して自動的に再ルーティングされます。標準的な libcurl API についての説明は、「参考文献」を参照してください。


ダウンロード

IBM Worklight クライアント・ライブラリー (Worklight 対応の iOS および Android FIPS HTTP/S クライアント・ライブラリー) を入手してください。これらのライブラリーは、HTTPClient.zip という名前のファイルに格納されています。


まとめ

この記事は、IBM の研究所で開発された新しいアプリケーション・レベル HTTP/HTTPS クライアント・ライブラリーを使い始める際に役立ちます。アプリケーション・レベル HTTP/HTTPS クライアント・ライブラリーは、IBM Worklight Studio を使用して作成するハイブリッドおよびネイティブ・アプリケーションにおいて、OS と端末に固有の HTTP/HTTPS クライアント・クラス実装に代わる、より柔軟で構成可能な実装としての役割を果たします。アプリケーション・レベル HTTP/HTTPS クライアント・ライブラリーによって実装されるセキュリティーおよびトランスポートの標準についての詳細は、「参考文献」セクションを参照してください。

謝辞

IBM で働く次の方々によるフィードバック、建設的な提案、サポート、そして生産性の高いチームワークに深く感謝いたします。

  • William D. Dodd、ソフトウェア・エンジニア、モバイル・アプリケーション・プラットフォーム
  • Raj Balasubramanian、シニア・ソフトウェア・エンジニア、IBM モビリティー・サービスの製品アーキテクト
  • Mark A. Smith、WebSphere テクニカル・プロフェッショナル・マネージャー
  • Dr. Robert Weaver、IBM グローバル・ビジネス・サービスの IT セキュリティー・アーキテクト
  • Jiachen Zhao、IBM Worklight のソフトウェア・エンジニア

この記事で説明したデモ・アプリとライブラリーを作成するために、OpenSSL、cURL、lwIP、XML2、OpenConnect などの数多くのオープンソース・プロジェクトを利用しました。

参考文献

学ぶために

  • 「Getting started with IBM Worklight V6.0」: 自分のペースで学習できる一連のモジュールを使用して、IBM Worklight V6.0 のインストールと構成を行い、その Worklight を使用して iOS 端末、Android 端末、Blackberry 端末、Windows Phone 端末を対象とした、スマートフォン・アプリおよびタブレット・アプリの作成、テスト、デプロイ、管理を始める方法を学んでください。
  • 「IBM Worklight V6.0.0 Getting Started: 最初の Worklight アプリケーション作成」: Worklight をセットアップして最初のアプリケーションを作成してください。
  • 「IBM Worklight server configuration for FIPS 140-2 validation and certification」 (Bhargav Perepa、developerWorks、2013年5月): この全 2 回で構成される記事では、FIPS 140-2 標準を紹介し、FIPS 140-2 準拠のテストに対応するように IBM Worklight サーバーを構成する方法を説明しています。
  • FIPS PUB 140-2: NIST の文書「FIPS 140-2 Security Requirements for Cryptographic Modules」標準を読んでください。
  • ハイブリッド・アプリとネイティブ・アプリで以下の HTTP/HTTPS ライブラリー API を使用してください。
  • トランスポート層セキュリティー・プロトコル: SSL (Secure Socket Layer) と TLS (Transport Layer Security) について詳しく学んでください。
  • developerWorks Mobile development サイトで、モバイル・アプリケーション開発者向けの IBM MobileFirst のツールおよびテクノロジーを入手し、その使用方法を学んでください。無料のソフトウェア・ダウンロードおよびクラウド試用版や、サンプル・コード、エキスパートによるハウツー・アドバイス、動画、トレーニング、ディスカッションを調べてください。

製品や技術を入手するために

  • IBM Worklight クライアント・ライブラリー (iOS および Android 対応の Worklight 用 FIPS HTTP/S クライアント・ライブラリー) をダウンロードしてください。このライブラリーは、HTTPClient.zip というファイルに格納されています。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Mobile development
ArticleID=949519
ArticleTitle=IBM Worklight で開発するモバイル・アプリで FIPS 140-2 準拠の HTTPS 暗号化を使用可能にする
publish-date=10242013