しばらくの間、この問題の解決策を探していましたが、理解できないようです
Android アプリとサーバーの間で http 接続を介して ssl を使用しようとしています。自己署名証明書を使用してキーストアを作成しました。
私はこのコードを持っています:
URL url;
SSLContext sslContext = null;
KeyStore keyStore = KeyStore.getInstance("BKS");
InputStream input = SportsApplication.getContext().getResources().openRawResource(R.raw.mykeystore);
keyStore.load(input, "mypass".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
kmf.init(keyStore, "mypass".toCharArray());
KeyManager[] keyManagers = kmf.getKeyManagers();
sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, null, null);
HttpsURLConnection connection = null;
String urlParameters = mJObject.toString();
try {
Log.w("client", mUrl);
Log.v("client", "request: "+urlParameters);
// Create connection
mUrl = mUrl.replaceFirst("http", "https");
url = new URL(mUrl);
connection = (HttpsURLConnection) url.openConnection();
try{
connection.setSSLSocketFactory(sslContext.getSocketFactory());
}
catch (Exception e1) {
e1.printStackTrace();
int tx =0;
}
try{
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-type", "application/json");
connection.setRequestProperty("Accept", "application/json");
connection.setReadTimeout(dataTimeout);
connection.setConnectTimeout(com.inmobly.buckeyes.client.Constants.DEFAULT_CONN_TIMEOUT);
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
}
catch (Exception e1) {
e1.printStackTrace();
int tx =0;
}
// Send request
DataOutputStream wr = null;
try{
wr = new DataOutputStream(connection.getOutputStream());
}
catch (Exception e1) {
e1.printStackTrace();
int tx =0;
}
しかし、私はこの例外を受け取り続けます:
javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x1b1b0e0: Failure in SSL library, usually a protocol errorerror:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:683 0x4029bcf5:0x00000000)
私は何を間違っていますか?