2011-12-29 12 views
0

可能性の重複:
securing connection to php serverアプリ認証

私は(私はより高レベルのアルゴリズム/プロトコルで、より興味がオンラインデータベースにアクセスするためのモバイルアプリケーションを書いていますプラットフォーム固有の実装)。

DBを更新すると、多くの作業が必要になるため、私のスポンサーアプリケーションへのアクセスを制限したいだけです(私のDBを無料で利用することを他のアプリケーションには望んでいません)。これを行うには、アプリケーション自体を認証する必要がありますが、どうすればいいですか?

アプリ内に何らかの種類の資格情報を保存すると、誰かがプログラムを逆アセンブルしてデータを取得し、自分のアプリケーションを迂回しようとする可能性があります(私はまだ復号鍵をどこかに保存する必要があります。 )

答えて

0

あなたがしたいのは、相互認証されたSSLを使用することです。これにより、サーバーはアプリケーションからの着信接続のみを受け付け、アプリケーションはサーバーとの通信のみを行います。

ここには、高度なアプローチがあります。自己署名入りのサーバーSSL証明書を作成し、Webサーバーに展開します。この目的のために、Android SDKに含まれているkeytoolを使用することができます(Androidを使用している場合は他のプラットフォームでも同様のツールがあります)。次に、自己署名付きのクライアントを作成し、アプリケーション内にリソースとしてカスタムキーストアに配置します(keytoolはこれも生成します)。クライアント側のSSL認証を要求し、生成したクライアント証明書のみを受け入れるようにサーバーを構成します。そのクライアント側の証明書を使用して自分自身を識別し、その部分のサーバーにインストールしたサーバー側の証明書を1つだけ受け入れるようにクライアントを構成します。

アプリ以外の誰かがあなたのサーバーに接続しようとすると、サーバーはあなたのアプリに含まれているクライアント証明書を提示しない受信SSL接続を拒否するため、SSL接続は作成されません。

これは、ここで保証されているよりもはるかに長い答えです。私は段階的にこれを行うことをお勧めします。これは、Web上に、サーバー側とクライアント側の両方で、Androidで自己署名入りのSSL証明書を処理する方法についてのリソースがあるためです。私の本のAndroidアプリケーションの完全なウォークスルーもあります(Application Security for the Android Platform、O'Reilly出版)。

今、あなたは、モバイルアプリにアクセスできる人がクライアント側の証明書に関連付けられた秘密鍵を回復できるという点で正しいです。 BKSキーストアでは暗号化されますが、アプリケーションはそのキーストアを開くためにパスワードを提供する必要があります。だから、誰かがあなたのアプリをリバースエンジニアリングすることができます(Androidプラットフォームではかなり簡単です)、パスワードを取得し、キーストアを取得し、それを解読してクライアント側の秘密鍵を回復します。これを緩和するには、アプリを難読化してキーストアのパスワードを逆転させることを難しくするか、ユーザーにアプリにログインしてそのパスワードを使用してキーストアなどのパスワードを派生させるようにしてください...本当にレベルに依存しますあなたのアプリケーションのために引き受ける意思のあるリスク。