web-dev-qa-db-ja.com

javax.net.ssl.sslpeerunverifiedexceptionピア証明書がありません

PHPアプリからAndroidアプリからサーバーにデータをポストすることにより、MySQLにレコードを挿入しようとしています。AndroidManifest.xmlにインターネット権限を追加しました

javax.net.ssl.SSLPeerUnverifiedException: No peer certificate

Androidコード

private void senddata(ArrayList<NameValuePair> data)
{
    try 
    {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("https://10.0.2.2/insert222.php");
        httppost.setEntity(new UrlEncodedFormEntity(data));
        HttpResponse response = httpclient.execute(httppost);

    }
    catch (Exception e) {
        // TODO: handle exception
        Log.e("log_tag", "Error:  "+e.toString());
    }
}

誰か助けてもらえますか?

12
Break Hart

警告:これを完全に信頼していないネットワークで使用する本番用コードに実装しないでください。特に公共のインターネットを介して行くもの。 このリンク は、より正確な回答を提供します。 ここ はSSLを使用した実装です。

あなたの問題は、https(secure url)にDefaultHttpClientを使用していることです。
カスタムのDefaultHttpClientを作成します

public static HttpClient createHttpClient()
{
    HttpParams params = new BasicHttpParams();
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
    HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET);
    HttpProtocolParams.setUseExpectContinue(params, true);

    SchemeRegistry schReg = new SchemeRegistry();
    schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
    ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schReg);

    return new DefaultHttpClient(conMgr, params);
}

次のようにコードを変更します。

        HttpClient httpclient = createHttpClient();
        HttpPost httppost = new HttpPost("https://10.0.2.2/insert222.php");
        httppost.setEntity(new UrlEncodedFormEntity(data));
        HttpResponse response = httpclient.execute(httppost);

問題がある場合は こちら をご覧ください
動作するはずです。

7
Lazy Ninja

IIS 8サーバーでこの問題が発生しました。httpsバインディングで、[サーバー名の表示が必要]チェックボックスをオフにする必要がありました。オフにすると、エラーが発生しなくなりました。

2
Tim Cooke

すべての信頼された証明書(COMODO、Symantecなどの認定センターによって信頼されたもの)は、いかなる場合でも機能する必要があると言わなければなりません。アプリがそのようなjavax.net.ssl.SSLPeerUnverifiedException:No peer certificateを受け取った場合、購入した証明書を使用して、サーバー側で何か問題が発生します。テストするにはopenssl s_client -connect example.com:443コマンドを使用して、アプリが受け取る証明書に関する内部情報を取得します。場合によっては、nginx-serverが間違った証明書を送信することがあります。

0
Vyacheslav