私のAndroidプロジェクトでapiが使用されています15. HttpsURLConnectionクラスを使用してhttpsでサーバーに接続しています。すべてはWiFi経由でうまく動作しますが、私は無線LANをオフにして、3グラム上で実行する場合、私は、次を得る:3g以上使用しても証明書パスの信頼アンカーが見つかりませんでしたが、WiFi上で正常に動作します
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:413)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:257) at libcore.net.http.HttpConnection.setupSecureSocket(HttpConnection.java:210)
at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:477)
at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:432)
at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232) at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188) at libcore.net.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:280)
私が何か間違ったことをやっている場合は、なぜそれがWiFi経由で動作するでしょうか?
ここにもう少し詳しい情報があります。
echo | openssl s_client -connect myserver.com:443 -servername myserver.com
が「正しい」証明書を返すのに対し、
私は、サーバー証明書の情報を表示するためにOpenSSLを使用している場合は、
echo | openssl s_client -connect myserver.com:443
は、サーバーレベルの自己署名証明書を返します。私はサーバ上に複数の仮想ホストを持っていますが、それぞれが独自のRapidsSlashで発行された証明書を持っていますので、TLS対応のクライアントを使用する必要があります。少なくとも、私は起動時に私のApacheのログに表示メッセージの私の解釈です:
Name-based SSL virtual hosts only work for clients with TLS server name indication support
私がこれまで正しいだ場合、それは私の携帯電話の3Gネットワークは、TLSでねじ込むことができ、または何か他のものがあるわけありません私はやっているはずですか?
私はは物事がDefaultHttpClientをサブクラス化し、サーバの自己署名証明書を含むキーストアをインポートすることにより、3グラム上で動作するように取得することができますが、それは間違いなく私の好ましい選択肢ではありません。
サーバーのURLは何ですか。 – jww