我正在開發一個與Web服務器通信的android應用程序。我們使用HTTPS進行此通信,並且我們在android應用程序內部還有一個用於身份驗證的客戶端證書。Android - SSL/TLS和ECC(橢圓曲線加密)
我們使用ECC(ANSI x9.62)創建了SSL證書,以便擁有非常小的證書,因此我們可以在握手期間降低傳輸成本。
的通信的源代碼是或多或少是這樣的:
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);
的問題是,當我們嘗試連接,我們有這樣的錯誤:
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找到一個ECC和SSL的例子,但我沒有找到任何東西。我發現了幾篇關於加密和密鑰對生成的文章(例如http://nelenkov.blogspot.com/2011/12/using-ecdh-on-android.html#!/2011/12/using-ecdh-on-android.html),但沒有任何與此類SSL錯誤相關的文章。
我們將不勝感激。先謝謝你!!
您確定客戶端和服務器均支持ECC證書嗎? ECC是一種罕見的鳥。 – 2012-02-02 15:53:00
我知道IIS證書支持ECC證書,因爲我使用IExplorer和Firefox進行了測試。我不知道的是,如果ECC證書是由android支持的。我在Android上使用ECC密碼進行一些小測試,但不瞭解證書。 – Kosmo 2012-02-03 07:07:28