13

私たちは、WCF サービスで標準化された .Net ショップです。アプリのデータを取得するために安全な Web サービス呼び出しを行う必要がある iPhone アプリケーションを開発中です。安全な通信を確保するために、Web サーバーで SSL を有効にしました。ただし、これは、許可されたアプリのみがサービスを利用できることを保証するものではありません。x509 証明書認証をサポートするようにサービスを構成しました。IPhone アプリから証明書認証を使用して安全な WCF サービスを呼び出すことさえ可能ですか?

インターネットで例を探すのに何時間も費やしましたが、役に立ちませんでした。セキュリティで保護されていない WCF サービスを問題なく呼び出すことができました。また、WS-Security および WS-Trust 通信標準についても多くの調査を行いました。これがどのように機能するかを理解していると思います。これを機能させるために必要な iPhone フレームワーク内のステップ/オブジェクトをつなぎ合わせるのに問題があります。

この件に関する考えやアイデアは大歓迎です。

また、次のいずれかについての考え:

  1. iPhone アプリケーションで P12 証明書ファイルを展開する最適な方法
  2. アプリ内で P12 ファイルのパスワードを保護する最善の方法
  3. アプリを使用して P12 ファイルをデプロイすることはベスト プラクティスですか
  4. この種の安全な通信をサポートするための iPhone フレームワーク内の機能はありますか? そうでない場合、代替の推奨事項は何ですか。
4

5 に答える 5

10

手始めに、セキュリティに真剣に取り組んでいるのであれば、セキュリティに適切な時間とリソースを割き、機能リストの第一級市民のように扱ってください。「SSL を有効にする」だけで、物事が安全であるふりをしてはいけません。あなたがこれをしている、またはこれをしていないことを示唆しているわけではありませんが、先に進む前にそれを言わなければならないように感じます.

とは言うものの、WS-* がすべて http 要求の上に構築されていることは既にご存じでしょう。大量の http 要求を実行するときはいつでも、ASIHTTPRequestが iPhone で非常に役立つことに気付くでしょう。ただし、それで 100% 達成できるわけではありません。

iPhone から見ると、次のようになります。

  1. あらゆる種類のネットワーク リソースを処理するための高レベル API であるURLローディング システム
  2. 低レベルのCFNetwork C API を使用すると、ストリームとネットワーク トラフィックの暗号化を適切な方法でより詳細に制御できます。
  3. 手間のかかる作業を行う証明書、キー、および信頼サービス、より具体的には X509 信頼ポリシー

Mac ではセキュア トランスポートを使用できますが、私が知る限り、彼らはそれをデバイスに移植していません。すべてを学ぶ気分:)

WCF を使用して何らかのセキュリティを行っている場合、おそらく最初に気付くのは、利用可能なオプションが多数あるということですが、要約すると、次の短いリストにまとめられます。

  1. クリア テキスト メッセージ (xml/json/...) を使用したトランスポート レイヤー セキュリティ (https)
  2. オープン トランスポート (http) を介したメッセージ レイヤー セキュリティ (暗号化されたメッセージ本文)
  3. 安全なトランスポートを介した安全なメッセージ

前回 (約 1 年前) WCF を行ったとき、Microsoft からの一般的な推奨事項は、トランスポートを保護しようとしたときにファイアウォール/アクセシビリティの問題が発生したため、オープン トランスポートに対するメッセージ レイヤー セキュリティのようでした。ただし、このアプローチでは、関係者全員が .NET / WCF に対応していることを前提としていました。明確な XML または JSON メッセージ本文を備えた HTTPS トランスポート レベルのセキュリティであれば、デバイスでの使用がより簡単になると思います。そうすれば、Apple が行った CFNetwork と NSHTTPRequest に焼き付けられたすべてのものを利用できます。

何かが機能したら、デバイスに証明書をインストールできるように、Enterprise Deployment Guide、特に Over-the-Air Enrollment に関するドキュメントを参照する必要があります。プログラムに付属している Apple サポート チケットのいずれかを使用することを恐れないでください :)

編集:

GenericKeychainCryptoExcerciseの例について言及するのを完全に忘れていました

編集2:

明らかな理由もなく反対票を投じられた後、返信を読み直したところ、デバイスで p12 ファイルを開く方法についての質問に実際に答えずに、少しとりとめのないことに気付きました。[[UIApplication sharedApplication] openURL:urlToP12FileEitherLocalOrRemote]]インストール手順のために、簡単にOSにキックアウトできるはずです。

于 2010-06-22T14:25:20.773 に答える
3

メッセージ レベルで ssl + ユーザー/パス認証を使用することもできます。

于 2010-02-20T12:08:50.707 に答える
1

一般に、iPhone に証明書をインストールする場合、私が見つけた 2 つのオプションがあります (両方ともここから):

  • 証明書を受信者に電子メールで送信します。それが有効な証明書であり、電子メールのヘッダーが適切である場合、電子メールの受信者は証明書をインストールできます。もちろん、ここでの問題は中間者攻撃です。

  • iPhone エンタープライズ構成ユーティリティを使用します。

これで、そこへの道のりの一部が得られるはずです(証明書をローカルにインストールします)。一般に、アプリケーション全体に対して 1 つの証明書をインストールするのではなく、ユーザーごとに個別の証明書をインストールする必要があることに注意してください。一般的に、アプリケーションを認証することは非常に悪いことですが、ユーザーを認証する必要があります。

ただし、既にユーザーを認証している場合は、HTTPS を介した基本認証を使用しても同様に機能する (そしてコーディングが簡単になる) ため、これは問題になりません。

于 2010-02-15T21:25:09.990 に答える
0

iPhone は、証明書で保護された WCF アプリケーションにアクセスできる必要があります。WCF サービスを Azure ACS の RP にすると、他の方法の中でも特に OAuth を使用して動作するはずです。

詳細については、こちらのサンプルをご覧ください: http://acs.codeplex.com/

于 2011-04-14T04:45:47.650 に答える
0

Yaron Naveh のソリューションにも同意します。おそらく最善の策は、SSL を使用することです。SSL/TLS 暗号化は、WCF でもメッセージ/XML ベースの暗号化よりもパフォーマンスが優れていると思います。

ただし、これが機能するには、証明書はおそらく信頼できるCA(認証局)からのものである必要があると思います。記憶によると、自己署名証明書を使用する iPhone SDK には問題がありましたが、昨年は状況が変わった可能性があります...

于 2010-03-10T17:58:16.667 に答える