私はWebサーバーと通信するアンドロイドアプリケーションを開発しています。この通信にはHTTPSが使用されており、認証のためにアンドロイドアプリケーション内にクライアント証明書もあります。Android - SSL/TLSとECC(楕円曲線暗号)
非常に小さな証明書を得るために、ECC(ANSI x9.62)を使用してSSL証明書を作成し、ハンドシェイク中の伝送コストを削減できます。
通信のためのソースコードは、多かれ少なかれ、このようなものです:
E/NativeCrypto(4744): Unknown error 5 during connect
W/System.err(4744): java.io.IOException: SSL handshake failure: I/O error during system call, Connection reset by peer
W/System.err(4744): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativeconnect(Native Method)
W/System.err(4744): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:316)
W/System.err(4744): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.<init>(OpenSSLSocketImpl.java:520)
W/System.err(4744): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:461)
W/System.err(4744): at org.apache.http.impl.io.SocketInputBuffer.<init>(SocketInputBuffer.java:93)
W/System.err(4744): at org.apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.java:83)
W/System.err(4744): at org.apache.http.impl.conn.DefaultClientConnection.createSessionInputBuffer(DefaultClientConnection.java:170)
W/System.err(4744): at org.apache.http.impl.SocketHttpClientConnection.bind(SocketHttpClientConnection.java:106)
W/System.err(4744): at org.apache.http.impl.conn.DefaultClientConnection.openCompleted(DefaultClientConnection.java:129)
(...)
私は見つけることTRID:
InputStream keystoreIs = getResources().openRawResource(R.raw.client_bks);
KeyStore keystore = KeyStore.getInstance("BKS");
keystore.load(keystoreIs, KEYSTORE_PASSWORD);
SSLSocketFactory socketFactory = new SSLSocketFactory(keystore, KEYSTORE_PASSWORD, keystore);
Scheme serverScheme = new Scheme("https", socketFactory, SERVER_PORT);
HttpClient httpclient = new DefaultHttpClient();
httpclient.getConnectionManager().getSchemeRegistry().register(iServerScheme);
HttpPost httppost = new HttpPost(SERVER_URL);
HttpResponse response = httpclient.execute(httppost);
問題は、我々のようなエラーが接続しようとするということですECCとSSLの例ですが、何も見つかりませんでした。私は、暗号化と鍵ペアの生成に関するいくつかの記事(たとえばhttp://nelenkov.blogspot.com/2011/12/using-ecdh-on-android.html#!/2011/12/using-ecdh-on-android.html)を見つけましたが、このSSLの種類のエラーは何も見つかりませんでした。
フィードバックをいただければ幸いです。前もって感謝します!!
ECC証明書がクライアントとサーバーの両方でサポートされていますか? ECCはまれな鳥です。 –
IExplorerとFirefoxでテストしたので、ECC証明書がIISでサポートされていることは知っています。私が知らないことは、ECC証明書がアンドロイドによってサポートされているかどうかです。私はAndroidでECC暗号を使用していくつかの小さなテストをしていますが、証明書については考えていません。 – Kosmo