Xamarin AndroidアプリケーションからIISサーバーに安全なwebsocket接続を開こうとしています。それは今まで使ったことのあるすべてのデバイスでうまく動作します。Samsung Tab E他のサムスンのデバイスでも正常に動作します。この場合セキュリティで保護されたwebsocket接続を開くときに予期しない例外が発生しました
var _webSocket = WebSocketFactory.Create();
_webSocket.OnOpened += _webSocket_Opened;
_webSocket.OnError += _webSocket_Error;
_webSocket.Open("wss://server.name.here/path/also/");
エラーハンドラを使って呼び出される:
[WebSocketを] javax.net.sslの
私はWebsockets.PCLライブラリと通常のコードを使用しています。 SSLException
[WebSocketを] javax.net.ssl.SSLException:javax.net.ssl.SSLException:エラーが委任タスクで発生した予期しない例外
このデバイスやその他のデバイスではなく、Chromeやその他のアプリ経由でのSSL接続に問題はありません。また、SignalRを介してこのアプリケーションから同じIISサーバーに接続することも問題ありません。
それはが他のサードパーティのライブラリは、別のWebサイトからライセンスを確認しようとしている問題を持っていないとエラーが記録されます。
javax.net.ssl.SSLHandshakeException:持つjavax.net.sslを.SSLProtocolException:SSLハンドシェイクが中止:SSL = 0x803b3b28:失敗をSSLライブラリーでは、通常、プロトコルエラー
私はそこに何が起こっているかをチェックすることはできませんので、連絡しようとして対処しているか分かりません。しかし、これは他のデバイスからも機能します。
これは、javax.net.sslによるこれらの2つの接続試行が失敗しているため、タブEのAndroid(v4.4.4、最新のもの)がSSL実装に問題があると考えています。しかし予期しない例外は多くの情報を与えていない。
これを回避するには?私はSignalRが使用するウェブソケットの実装を使用しても構いませんが、私が知っている限り、それは一般的な使用システムとして使用する準備ができていません。
追加情報
サーバがうまくTLS1の話を行い、ルートが知られていない場合を除きそれは、問題ではありませんので(、限り私はそれを知っているように、全体の証明書パスを送り、Iおよびそうであればハンドシェイクの失敗を予想します)。 OpenSSLを有する試験は示しています
証明書チェーン
0 S:/ OU =ドメイン制御検証済み/ OU = PositiveSSL/CN = our.domainを。com
i:/ C = GB/ST =大マンチェスタ/ L = Salford/O = COMODO CA Limited/CN = COMODO RSAドメイン検証セキュアサーバーCA
1 s:/ C = GB/ST =大マンチェスタ/ L = Salford/O = COMODO CA Limited/CN = COMODO RSAドメイン検証セキュアサーバーCA
i:/ C = GB/ST = Greater Manchester/L = Salford/O = COMODO CA Limited/CN = COMODO RSA証明機関
AddTrust ABT/OU = AddTrust外部TTPネットワーク/ 2:s/C = GB/ST =グレーターマンチェスター/ L = Salford/O = COMODO CA Limited/CN = COMODO RSA認証機関
CN = AddTrust外部CAルートクライアント証明書CA名が送信されていません
キー サーバーの温度は:ECDH、P-256、256ビット新しい、TLSv1の/のSSLv3、暗号がECDHE-RSA-AES256-SHA
サーバーの公開鍵が2048ビット
です残念ながら、OpenSSLは」doesnの'-ssl2`フラグをサポートしません。オンラインツールでは、SSL2が無効で、SSL3、TLS1、TLS1.1、およびTLS1.2が有効になっていると言われています。
私はカスタムSSLSocketFactory
ルートを試すことができましたが、XamarinとWebsockets.PCLをどのように通過するのかを確認する必要があります。
Android 4.4以降で[SSLHandshakeException]が重複している可能性があります(http://stackoverflow.com/questions/37222696/sslhandshakeexception-on-android-4-4-and-lower) – SushiHangover
古いAndroid 4.2デバイスでもうまく動作しています。 –
私は*いくつかのことを想定しています。 CA証明書は異なるので、独自の 'TrustManager'を使ってクライアント証明書を処理する必要があります。そうすれば、カスタムTrustManagerがそれを解決するために自己署名証明書を使用しています。 4.2はABIリリース4.4とは違って、KitKatとJBK、ICSではcertsにいくつかの問題があります....さらにそのデバイス(Tab-E)は、性能上の問題のためにSamsung-KitKat変種です。あなたのサーバはTLS1.1だけをサポートしていますか? TLS1.2?...など... – SushiHangover