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());
}
}
誰か助けてもらえますか?
警告:これを完全に信頼していないネットワークで使用する本番用コードに実装しないでください。特に公共のインターネットを介して行くもの。 このリンク は、より正確な回答を提供します。 ここ は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);
問題がある場合は こちら をご覧ください
動作するはずです。
IIS 8サーバーでこの問題が発生しました。httpsバインディングで、[サーバー名の表示が必要]チェックボックスをオフにする必要がありました。オフにすると、エラーが発生しなくなりました。
すべての信頼された証明書(COMODO、Symantecなどの認定センターによって信頼されたもの)は、いかなる場合でも機能する必要があると言わなければなりません。アプリがそのようなjavax.net.ssl.SSLPeerUnverifiedException:No peer certificateを受け取った場合、購入した証明書を使用して、サーバー側で何か問題が発生します。テストするにはopenssl s_client -connect example.com:443
コマンドを使用して、アプリが受け取る証明書に関する内部情報を取得します。場合によっては、nginx-serverが間違った証明書を送信することがあります。