0

すべてのセキュリティ対策を試みていますが、サーバーにあるような自己署名 X.509 証明書をクライアントに受け入れてもらいたいと思っています。私は WP8 SKD に加えて、bouncywp7.1 と呼ばれる Windows Phone 用の Bouncy Castle の C# バインディングを使用しているため、そのほとんどのクラス/メソッドが利用可能です。

Android でこれを行う方法は、独自の Certificate Trust Manager を作成し、すべての証明書に対して true を返すようにすることでした。

public static void allowAllSSL() 
{
    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
        @Override
        public boolean verify(final String hostname, final SSLSession session) {
            return true;
        }
    });
    SSLContext context = null;
    try {
        context = SSLContext.getInstance("TLS");
        context.init(null, sTrustManagers, new SecureRandom());
    } catch (final NoSuchAlgorithmException catchException) {
        LoggerFactory.consoleLogger().printStackTrace(catchException);
    } catch (final KeyManagementException catchException) {
        LoggerFactory.consoleLogger().printStackTrace(catchException);
    }
    mFakeFactory = context.getSocketFactory();
    HttpsURLConnection.setDefaultSSLSocketFactory(mFakeFactory);
}

Windows Phone 8 で同じことを行う最も簡単な方法は何ですか?

4

1 に答える 1

7

私の知る限り、WP8でSSLをだますことはできません。SSL を使用しているか、使用していないかのどちらかです。証明書の検証を上書きすることはできません (または、少なくとも私はそれについて聞いたことがありません)。

SSL を使用していて、カスタム証明書を使用する場合は、ユーザーがそれをインストールする必要があります。たとえば、ユーザーに cer ファイルをメールで送信したり、ユーザーを設定画面から組織に参加させたり、アプリから CER ファイルに Launcher.LaunchFileAsync() を使用したりできます。

たとえば、プロジェクトに FiddlerRoot.cer を (Build Action = Content で) 含める場合、次のコード スニペットを使用してインストールするようにユーザーに依頼できます。

    private async void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        Launcher.LaunchFileAsync(await Package.Current.InstalledLocation.GetFileAsync("FiddlerRoot.cer"));
    }

このコード スニペットを実行すると、次のダイアログがユーザーに表示されます。

インストール認証確認ダイアログ

于 2012-11-29T02:26:54.947 に答える