2016-09-29 2 views
1

私は自分のサーバーとSSLを使って話しますが、自己署名証明書を持っています。Xamarin.iOSおよびUniversal Windows Platformで自己署名入りのSSL証明書を使用する方法は?

は、Androidで私は自分のサーバーにできるメイク要求であることをシステムに自分のSSL証明書を渡すために、このコードを使用します。今、私はWindowsのユニバーサルアプリケーションでこのようなものが必要

KeyStore ks = KeyStore.getInstance("BKS"); 
InputStream in = new ByteArrayInputStream(<byte [] my_ssl_data>); 
ks.load(in, <string mypassword>.toCharArray()); 
in.close(); 

TrustManagerFactory Main_TMF = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
Main_TMF.init(ks); 

X509TrustManager Cur_Trust_Manager = new X509TrustManager() 
{ 
    public void checkClientTrusted(X509Certificate [] chain, String authType) throws CertificateException { } 
    public void checkServerTrusted(X509Certificate [] chain, String authType) throws CertificateException { } 
    public X509Certificate [] getAcceptedIssuers() { return null; } 
}; 

SSLContext sslContext = SSLContext.getInstance("TLS"); 
sslContext.init(null, new TrustManager[] { Cur_Trust_Manager }, new SecureRandom()); 

HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); 
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() 
{ 
    @Override 
    public boolean verify(String hostname, SSLSession session) 
    { 
     try 
     { 
      Cur_Trust_Manager.checkServerTrusted((X509Certificate []) session.getPeerCertificates(), session.getCipherSuite()); 
      return true; 
     } 
     catch (Exception e) {} 
     return false; 
    } 
}); 

8.1+(Windowsの+ WindowsPhone) iOS 7.0以降。

私は、UWPとXamarin.iOSの両方で動作するSystem.Net.Http.HttpClientを使用します。サーバーからDER形式の証明書を取得しましたが、HttpClientにハンドラを追加できません。

Xamarin.iOSバージョンは、残念ながら

HttpClientHandler myHandler = new HttpClientHandler(); 
X509Certificate2 certificate = new X509Certificate2(); 
certificate.Import(my_cert_der_bytes); 
myHandler.ClientCertificates.Add(certificate); 
myHandler.ClientCertificateOptions = ClientCertificateOption.Manual; 
myHandler.AllowAutoRedirect = false; 
HttpClient c = new HttpClient(myHandler); 
.... 

UWPバージョン "実装されていません" と言う(と、なぜ地獄を?)X509Certificate2とすべてのものを知りません。私はWinRtHttpClientHandlerを使用しようとしましたが、どこの証明書を渡すべきか理解していませんでした。私はエラーをスキップしようとしましたが(動作を開始しましたが)、それは解決策ではありません。私の要求が、別の不安定なサーバーにリダイレクトされないようにするためです。

var filter = new HttpBaseProtocolFilter(); 
Certificate cer = new Certificate(my_cert_bytes.AsBuffer()); 
filter.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted); 
filter.IgnorableServerCertificateErrors.Add(ChainValidationResult.Expired); 
WinRtHttpClientHandler myHandler = new WinRtHttpClientHandler(filter); 
HttpClient c = new HttpClient(myHandler); 
.... 

これはほとんどのインディーにとって共通の課題だと思われますが、証明書はテストや小さなアプリではめったにありません。しかし、プラットフォーム開発者はタスクが非常に困難になっているようです。信頼できる解決法はありますか?

答えて

-1

UWPアプリケーションは無効な(自己署名された)証明書では動作しません。あなたはテストhttpsのためのフィドラーの証明書を持つ代理人としてフィドラーを使用することができます。

Telerik Fiddlerのオプション - HTTPS - HTTPSのキャプチャが接続されます。

モバイルエミュレータではなく、デスクトップ上でのみ動作します。

+0

これは解決策ではなく、自己署名入りの証明書はデバッグ証明書ではありません。私は証明書を支払う必要はなく、証明書が期限切れになるか、証明書発行者のサイトがダウンすると問題を回避したい – Tertium

関連する問題