60

このコードを使用して https リクエストを作成しようとしています:

RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
request = new Request<String>(Request.Method.GET,"https://devblahblahblah.com/service/etc",errListener);

しかし、私はこのエラーが発生しています:

com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: 証明書パスのトラスト アンカーが見つかりません。

注意すべき点は次の 2 つです。

  1. HTTPS 証明書は有効です。ブラウザの警告なしで簡単に開きます。
  2. 上記のコードは、HTTP リンクで正常に動作します。

Android Volley フレームワークにスイッチ/オプションがあるかどうかを実際に知る必要がありますか?

4

10 に答える 10

16

このクラスを追加しonCreateて、メソッドから実行できます

new NukeSSLCerts().nuke();

すべての SSL 証明書を信頼するようにボレーします。

于 2016-04-26T19:09:38.090 に答える
4

これまでのところ、信頼されていない証明書を解決策として追加することについての唯一の答えがありますが、ブラウザーは文句を言わないため、通常、Volley は完全な信頼チェーンを完成させる中間証明書を見つけることができないことを意味します。

LetsEncrypt 証明書で私に起こりました。ほとんどのブラウザーには既にその中間証明書があるため、ブラウザーではすべて問題ないように見えますが、Volley には明らかに何かが欠けていました。

解決策
中間証明書を Web サーバー構成に追加します。Apache の場合は、次のリファレンスに従うことができます:
https://access.redhat.com/solutions/43575

LetsEncrypt の場合、具体的にはこのファイルです。/etc/letsencrypt/live/your.website.com/chain.pem つまり、CertificateFile と KeyFile に加えて、既に機能しているはずです。次の 3 行目があります。

SSLCertificateChainFile /etc/letsencrypt/live/your.website.com/chain.pem

その行を追加するだけで、apache と Volley を再起動しても問題がなくなり、セキュリティ上の脆弱性が発生することもありません!

于 2016-12-23T14:27:46.813 に答える
1

@Ogre_BGR から提供されたリンクを開くことができませんでしたが、ネットを閲覧しているときに、smanikandan14 Githubに従って実際の実装が行われていることがわかりました。詳細については、彼のSSL 接続の説明を参照してください。

于 2014-05-02T14:01:48.363 に答える
0

これは、次のようないくつかの理由で発生する可能性があります。

  • サーバー証明書を発行した CA が不明でした
  • サーバー証明書は CA によって署名されていませんが、自己署名されていました
  • サーバー構成に中間 CA がありません

Androidの公式ドキュメント

解決策: リクエスト内で証明書ファイルを提供できます

于 2017-02-13T08:48:59.997 に答える