2

私の Android アプリケーションは、.NET で記述された ASP.net Web API と通信することになっていC#.Netます。電話から送信されるデータには、一般に公開してはならないデータが含まれています。だから私はhttpsプロトコルを使用しようとしています。HTTPS私のサーバー側では、次のようにすべてのリクエストを にする必要があります。

登録済みImeiが必要

public class RequireRegisteredImeiAttribute : AuthorizationFilterAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            var request = actionContext.ControllerContext.Request;

            if (request.RequestUri.Scheme == Uri.UriSchemeHttps)
            {
               //OKAY
            }
            else 
            {
             actionContext.Response = new HttpResponseMessage(HttpStatusCode.Forbidden);
            }
        }
     }

そしてコントローラーで

[RequireRegisteredImei]
public string Post()
{
}

携帯電話から簡単なメッセージを送信してこのコードをデバッグしましたがhttp request、このコードは非常にうまく機能しますが、拒否されます。

httpsそこで、 Android フォンからリクエストを送信する方法を検討し始めました。私はこのようなものを思いついた:

public static DefaultHttpClient getSecureHttpClient() {
        SchemeRegistry schemeRegistry = new SchemeRegistry();
        schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
        schemeRegistry.register(new Scheme("http", SSLSocketFactory.getSocketFactory(), 80));
        BasicHttpParams params = new BasicHttpParams();
        SingleClientConnManager mgr = new SingleClientConnManager(params, schemeRegistry);
        return new DefaultHttpClient(mgr, params);
    }

私はこの方法をこのように使用しています:

HttpClient httpClient = CustomHttpClient.getSecureHttpClient();

これは、IOException: No peer certificate

これに関するいくつかのスレッドを読みました:

Android での https (ピア証明書なし) に関する問題

Android SSL - ピア証明書なし

Android 2.3 では「ピア証明書がありません」というエラーが発生するが、4 では発生しない

HTTPSしかし、アンドロイドからデータを投稿する簡単な方法が必要ですか?

4

2 に答える 2

1

HttpClient次のように、すべての証明書を受け入れるように を設定することもできます。

    SSLSocketFactory sslSocketFactory=SSLSocketFactory.getSocketFactory();
    HostnameVerifier hostnameVerifier=org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
    sslSocketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);

    SchemeRegistry schemeRegistry = new SchemeRegistry();
    schemeRegistry.register(
            new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    schemeRegistry.register(
            new Scheme("https", sslSocketFactory, 443));

これがあなたにとっての解決策かもしれないと思うなら。

于 2013-01-21T10:49:11.180 に答える
1

すべての Android バージョンに含まれていないカスタム証明書または CA によって発行された証明書がある場合は、その証明書をアプリに含めて直接使用できます。

これを行うには、サーバー証明書を (もちろんキーなしで) BKS キーストアにインポートする必要があります。これは、カスタム信頼ストアとして使用できます。

その方法を説明する非常に優れたチュートリアルはUsing a Custom Certificate Trust Store on Androidです。

EasyTrustManager や DummyTrustManager などの標準的なソリューションとは異なり、このソリューションは SSL の認証を無効にしないため、他のソリューションのように安全ではありません。

于 2013-01-21T09:59:25.057 に答える