2012-01-04 9 views
3

私はモバイルゲームのサーバーバックエンドを設計しています。 iPhoneとAndroidは、Linuxサーバー上のPHPスクリプトとやり取りしてAPI呼び出しを行います。携帯ゲーム用SSL

基本的に、電話機は登録時(自分が割り当てられている)にゲームIDを「知って」いるので、今は認証に使用しています。たとえば、ユーザーの電話がゲームの司会者である場合(自分のIDが司会者テーブルのエントリに関連付けられている場合)、そのゲームのルールなどを編集できます。

しかし、安全ではありません。誰かが簡単に私のスクリプトへのHTTP POSTコールを作り、ゲームで不正行為をすることができます。

私は電話機とサーバー間を行き来するメッセージを暗号化するためにSSLを実装することを決めました。購入するSSL証明書の種類を確認するにはどうすればよいですか?私はどこで設定することができますか?私はこれに関する経験がありません。最高の/最も簡単な/最も費用対効果の高いものについてのいくつかの熟練したモバイル開発者からのアドバイスは素晴らしいものを超えています。

答えて

4

相互認証されたSSLを使用して、サーバーがゲームからの着信接続のみを受け付け、ゲームアプリケーションがサーバーとの通信のみを行うようにします。クライアント(ゲームアプリ)とサーバーの両方を制御するので、何も買う必要はありませんが、自己署名証明書に頼ることができます。

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

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

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

+0

これは良い方向です。一度設定したら、それが成功したことをどのように確認するのですか?プログラマとして私はデバッグできることに慣れています - ここで私は成功したSSLハンドシェイクのような最終結果がどのようなものか分かりません。任意のポインタ? – lollercoaster

+0

クライアントでHTTPS接続を指定している限り、HTTPS接続は機能するか動作しません(AndroidではHttpsUrlConnection)。サーバーのログを見たり、サーバー上のWiresharkのようなパケットスニッファを使用して、ネットワークトラフィックを調べ、SSL/TLSで暗号化されていることを確認することもできます。 – jeffsix

関連する問題