2012-05-09 11 views
1

私たちはiPhone上でモノタッチで動作するアプリケーションを持っています。現時点では、BasicHttpBindingを使用してWCFサービスに接続しています。 BasicHttpSecurityMode.Transport(これは実質的にHTTPSです)でBasicHttpBindingを再度使用して、接続を安全にするプロセスが完了しました。モノトゥッチとWCFでHTTPSを使用

自己署名入りの証明書を作成し、サーバーに追加しました。ブラウザ(iPhoneとPCの両方)を介してサーバーアドレスにアクセスする際に問題なく接続できます。しかし、我々はMonoTouchでアプリケーションと接続した場合、私たちは、次の例外が発生します:

System.Net.WebException has been thrown 
    Error writing request: BeginWrite failure 

我々は(それはのClientHelloを受け取った後、サーバがTCPリセットを送信)接続を分析するためにWiresharkのを使用して、サーバーが接続を閉じていることが判明しました。私たちは、IISのエラーログに以下のメッセージが見つかりました:私たちはそのMonoTouchでは、少なくとも知っているのに対し

TLS_RSA_WITH_AES_128_CBC_SHA256 
    TLS_RSA_WITH_AES_128_CBC_SHA 
    TLS_RSA_WITH_AES_256_CBC_SHA256 
    TLS_RSA_WITH_AES_256_CBC_SHA 
    TLS_RSA_WITH_RC4_128_SHA 
    TLS_RSA_WITH_3DES_EDE_CBC_SHA 
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256 
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384 
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256 
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384 
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256 
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384 
    TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256 
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256 
    TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384 
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384 
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256 
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384 
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256 
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384 
    TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 
    TLS_DHE_DSS_WITH_AES_128_CBC_SHA 
    TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 
    TLS_DHE_DSS_WITH_AES_256_CBC_SHA 
    TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA 
    TLS_RSA_WITH_RC4_128_MD5 
    SSL_CK_RC4_128_WITH_MD5 
    SSL_CK_DES_192_EDE3_CBC_WITH_MD5 
    TLS_RSA_WITH_NULL_SHA256 
    TLS_RSA_WITH_NULL_SHA 

An TLS 1.0 connection request was received from a remote client application, but none of the cipher suites supported by the client application are supported by the server. The SSL connection request has failed. 

を我々は暗号が当社のサーバーでサポートされているかを調べる場合は、我々は以下のリストを参照してくださいTLS_RSA_WITH_AES_128_CBC_SHAをサポートしています(Wiresharkによる)

この問題または回避策を解決する方法はありますか? IISやmakecertで特別なオプションを使用する必要があるかもしれません。

ありがとうございます!

答えて

0

ブラウザで証明書エラーが表示されますか?その場合は、次のものを使用する必要があります。

ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => true; 

最初にリクエストする前にこれをプログラムで1回行います。自己署名されたものであっても、すべての証明書を自動受け入れます。

ここでも、MonoTouchは別のエラーメッセージを表示するはずです。 Windowsではどうなりますか?

0

Mono(およびMonoTouch)は、あなたのリスト(多くは*DH*のものを除く)からの多くの暗号をサポートしています。

ログのエラーは、サーバーが暗号の選択により接続を受け入れていないことを示しています。 SSL/TLSでは、クライアントは自分のリストをサーバーに送信し、サーバーはそれが好むもの(パフォーマンス/セキュリティー)を選択します。これに影響を与えるためにMono [Touch]側で変更できるものは何もありません。

サーバはは(モノラル)から提供された暗号のいずれかを受け入れるように構成されていないとき、私はそのような場合のみを見てきました。これは一般に、*DH*の暗号のみをサポートするように構成されたサーバーです。

サーバがサポートしているもの(または許可するように設定されているもの)を100%確かめるのは必ずしも容易ではありません。 SSL/TLSプロトコルは、(クライアントとは異なり)このようなリストを送信することはありません。

Wiresharkと一部のWebブラウザを使用してサーバーに接続することをお勧めします。接続が動作し、*DH*暗号を使用すると、サーバーが誤って構成されている(98%)ことがわかります(上記のリストを参照)。

なぜですか?ブラウザは一般にMonoのような多くの暗号とMonoとは異なり*DH*をサポートしているためです。サーバーが*DH*暗号を選択した場合、それは他のことを許可しないという良い手がかりになります。サーバーの通常の選択は、RC4またはAES - YMMVを使用する傾向があります。

関連する問題