2017-12-28 13 views
0

私はHTTP POST要求を介してバックエンドサーバーと通信するAndroidアプリを持っています。私はそれをHTTPSにアップグレードしたいと思います。私が使用しているAPIはHttpLib.postRequestです。ロードバランサとTLSネゴシエーションの失敗をデバッグするにはどうすればいいですか?

Apacheサーバーへの直接接続が正常に機能していることがわかりました。しかし、ロードバランサ経由の接続は機能しません。私のロードバランサはAliyunのものです。私は2つの異なるロードバランサを試しました。どちらも同じ方法で失敗します。直接の症状は、電話で「unknown_err」を取得することです。

私はtcpdumpを使ってトラフィックをキャプチャできます。これは、正しい場所に接続して、交渉しようとしていることを証明します。セッションは、クライアントがHTTPSエラー「証明書不明(46)」を送信して終了します。

これは通常、不正な証明書または構成によって発生します。しかし私は自分の証明書がすべて有効であることを知っています。他のブラウザは、通常のWebページを読み込むために同じサーバに接続するとうまく動作します。同じアプリのiOS版もうまく動作します。アプリが接続に失敗している場合でも、Android端末のウェブサイトを閲覧すると正常に動作します。ウェブサイトはhttps://zaomengshe.comです。そこで証明書を確認できます。また、ロードバランサとLet's Encryptの証明書とは別の設定をしています。

私は、AliyunのロードバランサとAndroidのいくつかの特質が、交渉がうまくいかないと思うでしょう。おそらく私はいくつかのアルゴリズムやキーサイズなどのサポートを有効にする必要があります。私はTLS 1.2がAPIバージョン20までサポートされていなかったことを読んだので、サポートされている最小バージョンを20に更新しました。それは役に立ちませんでした。このドメインの

答えて

1

report by SSLLabsはっきり言う:

このサーバの証明書チェーンが不完全です。 B.

この問題の原因に頂いたグレードは、おそらくロードバランサの設定を台無しにされています唯一のリーフ証明書は、TLSハンドシェイク内で配信されても​​いない中間証明書は、信頼チェーンを構築するために必要な。デスクトップブラウザは通常、このような壊れた設定を回避しようとしますが、他のアプリケーションは通常そうしません。

これは、アプリケーションが失敗する可能性が高いことを示しています。また、中間証明書を構成することによって、ロードバランサで問題を修正する必要があります。

+0

ああ、それは完璧な感覚です、ありがとう。 SSLLabsへのポインタをありがとう! –