2016-04-04 14 views
3

は、だから私は、私は、(私が作っていアンドロイドアプリ用)テスト用の自己署名証明書を使用して、それがすべての作業を完全にサーバ側でHTTPSにすべての私のHttp Webサービスを変更していますと私のPCの証明書ストアに証明書を追加してサイトに完全にアクセスできるので、これを知っています。クライアント側でAndroidアプリを呼び出す際に、どのように問題が起きているのですか。アンドロイドXamarin C#:HTTPS ServiceStackと自己署名証明書

私Servicestackコールは次のようになります。

 var client = new JsonServiceClient(stubServicesBaseUrl); 

     return client.Get(new GetLastStatusUpdate()).StatusUpdates.Last(); 

、これらは、それが唯一のhttpたときに動作するために使用さが、私は資格情報の呼び出しを格納し、信頼アンドロイドに自己署名証明書を追加するためのコードを追加しましたので、動作を停止しています代わりにリクエストがタイムアウトしたようです。

 byte[] certificate; 
     using (var streamReader = new StreamReader(Assets.Open("ScoutTestCert.crt"))) 
     { 
      using (var byteStream = new MemoryStream()) 
      { 
       streamReader.BaseStream.CopyTo(byteStream); 
       certificate = byteStream.ToArray(); 
      } 
     } 

     var installCertificate = KeyChain.CreateInstallIntent(); 
     installCertificate.PutExtra(KeyChain.ExtraCertificate, certificate); 
     StartActivity(installCertificate); 

上記のコードは、「ユーザー」セクションのアンドロイド信頼できるストアに証明書を追加し、私は問題なくandroidEmulator上のインターネットアプリを通じてサイトに移動することができますので、ときにのみ問題が表示されます思えます私のアプリケーションコードでServiceStack呼び出しをしようとしています。余分そのサービス・スタックのニーズまたはそのような何かを設定するよう

は、私は私のコードで何かが足りないのですか?私はこの問題を数日間、実際の道のりで苦労してきました! 私はservicestackとしてwebservice呼び出しを保つために、Android固有のコードではなくPCLにしたいと考えています。

ありがとうございました。

答えて

4

ServiceStackの.NET Service Clientsは.NETのBCLの組み込みのHttpWebRequestを使用して、custom Certificate Validation Callbackを登録する必要がある.NET HTTPクライアントで自己署名証明書を使用できるようにします。コールバックは以下の成功するためにすべての証明書を使用可能にしています。

ServicePointManager.ServerCertificateValidationCallback += 
    (sender, certificate, chain, sslPolicyErrors) => true; 

しかし、あなたはあなたの自己署名証明書で動作するように検証を下に制限したいと思います。

JsonHttpClient.GlobalHttpMessageHandlerFactory =() => 
    new NativeMessageHandler() 

代わりに.NET HTTPクライアントスタックを使用する:

ServiceStackのHttpWebRequestのベースサービスクライアントを使用する代わりに、でModernHttpClientを使用するように構成することができるという利点がある代わりにPCL HttpClient-based JsonHttpClientを使用することです基礎となるiOSおよびAndroidプラットフォームで使用可能なネイティブHTTPライブラリを使用します。これにより、Androidに登録されている証明書を使用できるようになります。

.NETに登録されている信頼できない自己署名証明書をModernHttpClientで使用するには、pro version of ModernHttpClientmentioned on this threadとする必要があります。

+0

すべての証明書が受理されなければならないように、だから私は私のアプリで起こる最初のものとしてServerCertificateValidationCallbackラインに追加してみました(ただ、これは私の作品をテストするために)、私はまだ同じ「WebExceptionを取得するように見える:要求がタイムアウトしました" エラーメッセージ。なぜこの例外が発生しているのかわかりません。要求が送信されていて何も返されていないので、これは正しいですか? 私はアクションの私の次のコースは多分HTTPSサービスに組み込まれた別のxamarinアンドロイドをしようとし、それがうまくいけば動作するかどうか見てだと思います。 – wootank

+0

@wootankわからないが、私は基本的な.NETの[HttpWebRequestの](https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest(V = vs.110)を得ることで最初に見てねWebRequest.Create(HttpWebRequestの) '上記のいずれかの追加の層を除去します( "URL")を':.aspxの)、直接、すなわち、URLを使用して動作します。NETのBCLクラス。それがうまくいかない場合は、Xamarinにバグレポートを提出して、根本的な問題点を教えてください。 – mythz

+1

こんにちは、助けてくれてありがとう、結局私たちはJsonHttpClientとModernHttpClientを使って2番目の提案と一緒に一人で行くことに決めました。 – wootank

関連する問題