同僚が自己署名サーバーを使用するhttpsサーバーを実装するプロジェクトに取り組んでおり、httppostsを送信するAndroidアプリを設計しています。彼はcurlを使用してテストしましたが、問題はありません。必要に応じて、Android3.2を使用しています。
ここでのこのチュートリアルに従って、キーストアを生成してアプリに追加し、カスタムhttpClientも作成しました。次のコードを使用して、getリクエストをpostに置き換えました。
private InputStream postHttpConnection(String urlValue,
JSONObject jsonPost, Context context) {
InputStream inStream = null;
URL url;
try {
url = new URL(urlValue);
URLConnection conn = url.openConnection();
if (!(conn instanceof HttpURLConnection))
Log.e("postHttpConnection", "Fail: " + "Not an HTTP connection");
} catch (MalformedURLException e) {
Log.e("postHttpConnection", "Fail: " + e);
} catch (IOException e) {
Log.e("postHttpConnection", "Fail: " + e);
}
try {
DefaultHttpClient client = new MyHttpClient(context);
HttpConnectionParams
.setConnectionTimeout(client.getParams(), 10000);
HttpResponse postResponse;
HttpPost post = new HttpPost(urlValue);
StringEntity se = new StringEntity(jsonPost.toString());
post.setEntity(se);
post.setHeader("Accept", "application/json");
post.setHeader("Content-type", "application/json");
postResponse = client.execute(post);
inStream = postResponse.getEntity().getContent();
} catch (ClientProtocolException e) {
Log.e("postHttpConnection", "Fail: " + e);
} catch (IOException e) {
Log.e("postHttpConnection", "Fail: " + e);
}
return inStream;
}
適切なJSONObjectを使用してこの関数を使用すると、次のエラーが発生します。
E/postHttpConnection(9236): Fail: javax.net.ssl.SSLException: Certificate for <address> doesn't contain CN or DNS subjectAlt
これが何に関係しているのか教えていただけますか?ありがとうございました。